私はRubyonRails 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
をロードしたいと思います(注:作成者のユーザーはデータベーステーブルに存在する列によって識別されます)(注:属性、 aはgemとitに必要です)データベーステーブルに存在する列です)各記事のタイトルの「近く」。category_associations
creator_user_id
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
値が表示に適しているようにします) 。