has_many :through在Rails中是否可能有多个相互传递的关系?我收到了这样做的建议,作为我发布的另一个问题的解决方案,但一直无法使它起作用。
朋友是通过联接表的循环关联。目标是创建一个has_many :throughfor friends_comments,因此我可以使用a 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
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)))
: SELECT "users".* FROM "users" INNER JOIN "friendships" ON "users".id = "friendships".friend_id WHERE (("friendships".user_id = 1) AND ((status = 2)))
因此,似乎完全是has_many通过友谊关系忘记了原来的内容,然后不适当地尝试将User类用作联接表。
我是在做错什么,还是根本不可能?