has_many :through
Railsで相互に通過する複数の関係を持つことは可能ですか?私が投稿した別の質問の解決策としてそうするようにという提案を受けましたが、それを機能させることができませんでした。
フレンドは、結合テーブルを介した循環的な関連付けです。目標はhas_many :through
forを作成することですfriends_comments
。これにより、aを取得して、1回のクエリで彼の友人からのすべてのコメントを取得するUser
ようなことができます。user.friends_comments
class User
has_many :friendships
has_many :friends,
:through => :friendships,
:conditions => "status = #{Friendship::FULL}"
has_many :comments
has_many :friends_comments, :through => :friends, :source => :comments
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
これは見栄えがよく、理にかなっていますが、私にはうまくいきません。これは、ユーザーのfriends_commentsにアクセスしようとしたときに関連する部分で発生するエラーです。
ERROR: column users.user_id does not exist
: SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments".user_id = "users".id WHERE (("users".user_id = 1) AND ((status = 2)))
user.friendsと入力するだけで、これが機能します。これは、実行されるクエリです。
: SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users".id = "friendships".friend_id WHERE (("friendships".user_id = 1) AND ((status = 2)))
has_many
そのため、友情関係を通じてオリジナルを完全に忘れてしまい、Userクラスを結合テーブルとして不適切に使用しようとしているようです。
私は何か間違ったことをしていますか、それともこれは単に不可能ですか?