私は、(この質問のために)Posts
複数にリンクされているRails 3アプリケーションに取り組んでおりCategories
、その逆も同様has_and_belongs_to_many
です。
Post < ActiveRecord::Base
has_and_belongs_to_many :categories
end
Category < ActiveRecord::Base
has_and_belongs_to_many :posts
end
私は、各投稿が2つの両方にリンクされているすべてのPosts
場所を取得するActiveRecord(またはARel)ファインダーを作成する方法を理解しようとしています。私は最終的に生成しようとしているSQLを理解しています(2つのそれぞれの一致のためにそれぞれを区別できるようにするためのエイリアスを持つ2つの内部結合)が、これまでのところ、なしでクエリを作成する方法を理解していません生のSQLビットに頼る。Categories
Categories
この場合、カスタムSQLを回避することが非常に重要である理由は、私が書いているコードが一般的でデータ駆動型であり、Post
オブジェクトのクエリで他のフィルタリング(および並べ替え)修飾子と混合する必要があるためです。他のフィルターによって生成されたSQLとうまく混ざらない可能性のあるメソッド呼び出しPost
(たとえば、のコレクションにアクセスするため)またはカスタムSQLのいずれかをハードコーディングするだけです。Categories
どういうわけかそれが物事を簡単にする場合、または他のORMオプション(DataMapper、Mongoidなど)を検討する場合でも、結合モデル(has_many :through
)の使用に切り替えることはできますが、それは非常に基本的なものを機能させるための大きな変更のようです。
ActiveRecord / ARelではこれが簡単ではなく明白ではないことに驚いていますが、答えを見つけるために検索する魔法のキーワードがわからないのかもしれません。ARelのドキュメントも驚くほどスリムなので、途方に暮れています。どんな助けでも大歓迎です!