2013-03-02 4 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 Edit и Destroy кнопки, но только если 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

Смежные вопросы