我正在使用Ruby on Rails 3.2.2并且我有以下has_many :through
关联以便“订购类别中的文章”:
class Article < ActiveRecord::Base
has_many :category_associations # Association objects
has_many :associated_categories, :through => :category_associations # Associated objects
end
class CategoryAssociation < ActiveRecord::Base
acts_as_list :scope => 'category_id = #{category_id} AND creator_user_id = #{creator_user_id}'
belongs_to :associated_article
belongs_to :creator_user, :foreign_key => 'creator_user_id'
end
在检索associated_categories
时,我想加载用户创建的category_associations
个对象( note :创建者用户由creator_user_id
列标识category_associations
数据库表)因为我需要显示position
值(注意:position
属性,{{1} },act_as_list
gem需要它,并且它是Integer
数据库表中的一列“”靠近“每篇文章标题。
实际上,在我看来,我希望以正确的和性能的方式制作类似以下的内容( note :它是假设category_associations
中的每篇文章都是由用户“与类别相关联” - 用户引用了@articles
所述的创建者用户:
category_associations
也许,我应该“创建”和“处理”一个自定义数据结构(或者,也许,我应该做一些其他的...),但我不知道如何继续完成什么我在找。
此时我认为热切加载对我的案例来说是一个很好的方法,因为我可以避免使用N + 1 queries problem,因为我必须在关联对象上声明更多条件,以便:
<% @articles.each do |article| %>
<%= link_to(article.title, article_path(article)) %> (<%= # Display the article position in the given category %>)
<% end %>
值); position
值适合替换)将每个特定属性值添加到相应的关联的对象。答案 0 :(得分:0)
我想,你正在寻找这个
@articles = Article.includes(:associated_categories)
这将急切加载您的所有文章,包括其两个关联(associated_categories,associated_categories)。因此,当您在视图中迭代@articles及其关联时,它将避免N + 1问题并且不会触发查询。