2013-03-02 46 views
0

我有相關的這樣三個對象:預先加載多個關聯

class Site < ActiveRecord::Base 
    belongs_to :program 
end 

class Program < ActiveRecord::Base 
    belongs_to :user 
    has_many :sites 
end 

class User < ActiveRecord::Base 
    has_many :programs 
end 

在我Sites index視圖,通過我所有的網站我想displiay EditDestroy按鈕的循環時,但前提是current_user擁有該網站:

- if current_user == site.program.user || current_user.try(:admin?) 
    = icon_link_to "edit", 'Edit', edit_program_site_path(site.program, site), :class => "btn btn-primary" 
    = icon_link_to "trash", "Delete", site, confirm: 'Are you sure?', method: :delete, class: 'btn btn-danger' 

此代碼失敗,因爲程序和用戶對象爲零。

我知道,在我的控制,我需要像下面這樣:

@sites = Site.includes(:programs).all 

這將解決訪問site.program的問題,但是我不知道我怎麼還可以包括user

如果當前模式被認爲是不正確的,模型更改是可以接受的。

謝謝。

回答

1

使用,

Site.joins(:program).where('programs.user_id=?', current_user.id).includes(:programs).all 
+0

很好的回答。我開始使用'Site.joins(:program =>:user).page(params [:page])',但是當我只需要當前的用戶時,這會提取每個用戶。不過,我也需要向其他用戶展示網站。 – Ash 2013-03-03 15:13:52