如何返回一个Mongoid :: Criteria for A有很多B有很多C关系?

时间:2013-05-09 16:31:49

标签: ruby-on-rails ruby mongoid

关系是:

Account has many Groups
Group has many Users

我需要Account中的方法来获取所有用户(每个组的用户),然后应用用户范围:

account.rb
def users
  self.groups.map(&:users).flatten # Cannot apply User's scope
end

user.rb
scope :foo, ->{ where(bar: 'baz' }

我想我必须在def users而不是数组中返回一个Mongoid :: Criteria,所以我可以account.users.foo。我怎么能这样做?

谢谢!

PS:我试过(应该在ActiveRecord中工作):

def users
  ids=self.groups.map(&:users).flatten.map(&:id)
  User.where(id: ids)
end

3 个答案:

答案 0 :(得分:2)

试试这个

def users
  User.where(:group_id.in => self.groups.map(&:id))
end

答案 1 :(得分:1)

试试这个:

def users
  self.groups.map {|g| g.users.foo }.flatten
end

答案 2 :(得分:0)

我使用find代替where并且它有效。

def users
  ids=self.groups.map(&:users).flatten.map(&:id)
  User.find(ids)
end

无论如何,我不确定这是否是我想做的最佳方式。建议将不胜感激。