通过rails中的自联接引用查询

时间:2013-11-21 23:17:37

标签: ruby-on-rails ruby-on-rails-3.2 has-many-through

我的模型为usersthings

用户可以拥有一个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这一事实通过'追随者',但也直接自己

由于

2 个答案:

答案 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

检查this other SO thread