我的模型为users
和things
用户可以拥有一个leader
和许多followers
其他用户。用户还可以拥有things
所以我有这些使用自连接关系的定义:
class User < ActiveRecord::Base
has_many :things, dependent: :destroy
has_many :followers, :class_name => 'User', :foreign_key => 'leader_id'
belongs_to :leader, :class_name => 'User', :foreign_key => 'leader_id'
end
class Thing < ActiveRecord::Base
belongs_to :user
end
因此,我可以通过询问things
来询问是否要求user
User.first.things
列出followers
。我还可以获得user
User.first.followers
的{{1}}列表。
如何获取用户关注者所拥有的内容列表。我想我可能需要使用has_many through
关系,但我似乎无法弄明白,因为我不知道如何处理Leader
可以things
这一事实通过'追随者',但也直接自己
由于
答案 0 :(得分:0)
怎么样:
all_things = (your_user.followers.each { |f| f.things }).flatten
这应该返回一个包含things
的数组,该数组属于所有your_user
的关注者。
答案 1 :(得分:0)
这样的事情:
def all_things
Thing.where(:user_id => followers.map(&:id).push(id))
end
它返回scope
,因此您应该能够继续链,例如:
User.first.all_things.visible
如果您只对关注者的内容感兴趣而未将用户的内容添加到批处理中,最好直接使用has_many through
进行操作:
has_many :followers_things, :through => :followers, :source => :things