【问题标题】:Eager Loading Multiple Associations渴望加载多个关联
【发布时间】:2013-02-17 02:46:03
【问题描述】:

我有三个相关的对象:

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 视图中,当循环浏览我的所有网站时,我想显示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

如果当前架构被认为不正确,则可以接受模型更改。

谢谢。

【问题讨论】:

    标签: ruby-on-rails-3 activerecord ruby-on-rails-3.2


    【解决方案1】:

    使用,

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

    【讨论】:

    • 好答案。我开始使用Site.joins(:program =&gt; :user).page(params[:page]),但是当我只需要当前用户时,它会获取每个用户。但是,我还需要向其他用户展示网站。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2011-08-24
    相关资源
    最近更新 更多