鉴于以下两个模型:
User (id)
FbFriendCache(user_id,fb_user_id)
我希望能够:@ user.facebook_friends
哪个会从用户模型返回@users
我试过了:
class User < ActiveRecord::Base
has_many :fb_friends,
:through => :fb_friend_cache,
:foreign_key => "fb_user_id"
但是失败了w无法找到关联。
想法?感谢
答案 0 :(得分:2)
您需要先定义facebook_friends_cache
关联:
has_many :facebook_friend_cache, :class_name => "FacebookFriendCache"
然后你需要在那之后定义:through
关联:
has_many :fb_friends, :through => :facebook_friend_cache, :foreign_key => :user_id
这里的foreign_key
必须是表示外表中User
对象的id的字段,因此它必须是user_id
而不是fb_user_id
。
我真的会给facebook_friend_cache
一个更好的名字。
答案 1 :(得分:1)
我发布此答案,因为我无法在评论中提供文档摘要。 Ryan的解决方案需要进行调整。
foreign_key
关联忽略has_many :through
属性。您应该使用source
属性。
:通过
指定执行查询的关联。 这可以是任何其他类型的关联,包括其他:通过 关联。 选项:class_name,:primary_key和:foreign_key 被忽略,因为关联使用源反射。
..
:来源
指定has_many使用的源关联名称 :通过查询。只有在无法从中推断出名称时才使用它 协会。 has_many:subscriber,:through =&gt; :订阅将 寻找:订阅者或订阅者订阅者,除非a :来源。
以下解决方案应该有效:
class User < ActiveRecord::Base
has_many :fb_friend_cache
has_many :facebook_friends, :through => :fb_friend_cache, :source => :fb_user
end
class FbFriendCache < ActiveRecord::Base
belongs_to :user
belongs_to :fb_user, :class_name=>"User"
end