Rails でアソシエーションを操作する方法、具体的には、明示的な SQL コードを記述する場合としない場合を把握しようとしています。
私のアプリケーションには、次のように定義された 4 つのモデルがあります。
class User < ActiveRecord::Base
has_many :comments
has_many :geographies
has_many :communities, through: :geographies
class Comment < ActiveRecord::Base
belongs_to :user
class Community < ActiveRecord::Base
has_many :geographies
has_many :users
class Geography < ActiveRecord::Base
belongs_to :user
belongs_to :community
ユーザーはコメントを投稿でき、geography テーブルを介して 1 つ以上のコミュニティに関連付けられます (geography テーブルにはuser_id
およびが格納されますcommunity_id
)。
すべてのコメントを一覧表示するインデックス アクションがあり、コミュニティでフィルター処理したいと考えています。コメント オブジェクトを指定すると、 を介してユーザー オブジェクトを取得できますがcomment.user
、それを超えてチェーンすることはできません (つまり、 のようなものcomment.user.geography(0).community
は機能しません)。
このオブジェクトチェーンは Rails の重要な機能のようですが、has_many :through アソシエーションで機能しますか? 私の例では、オブジェクト チェーンを使用してコメント オブジェクトからコミュニティ オブジェクトを取得することは可能ですか? または、コメント オブジェクトが与えられたときにユーザー以外のものを取得するには、SQL を記述する必要がありますか?