У меня есть три объекта, которые связаны, как так:жадная загрузка нескольких ассоциаций
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
.
Изменения модели приемлемы, если текущая схема считается неправильной.
Спасибо.
Хороший ответ. Я начал использовать 'Site.joins (: program =>: user) .page (params [: page])', но это выбирает каждого пользователя, когда мне нужно только текущее. Однако мне нужно показывать сайты другим пользователям. – Ash