我正在使用 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
用户创建的对象(注意:创建者用户由数据库表creator_user_id
中存在的列标识) ,因为我需要显示值(注意:属性 an是gem 和它所必需的是数据库表中的一列)“靠近”每篇文章的标题。category_associations
position
position
Integer
act_as_list
category_associations
实际上,在我看来,我想以一种适当且高效的方式制作类似以下内容(注意:假设每篇文章@articles
都由用户“类别相关” - 用户指的是提到的创建者用户category_associations
):
<% @articles.each do |article| %>
<%= link_to(article.title, article_path(article)) %> (<%= # Display the article position in the given category %>)
<% end %>
可能,我应该“创建”和“处理”一个自定义数据结构(或者,也许,我应该做一些其他的......),但我不知道如何继续完成我正在寻找的东西。
此时我认为急切加载对我的情况来说是一个好方法,因为我可以避免N + 1 查询问题,因为我必须在关联对象上声明更多条件,以便:
- 检索给定用户创建的关联对象的特定属性值(在我的情况下是指
position
值) ; - 将这些特定属性值中的每一个与相应的关联对象“关联”(以某种方式,以便
position
值适合于显示) 。