1

关系是:

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' }

我想我必须返回一个 Mongoid::Criteriadef users而不是一个数组,所以我可以做account.users.foo. 我怎样才能做到这一点?

谢谢!

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

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

3 回答 3

2

尝试这个

def users
  User.where(:group_id.in => self.groups.map(&:id))
end
于 2013-05-09T16:42:03.687 回答
1

尝试这个:

def users
  self.groups.map {|g| g.users.foo }.flatten
end
于 2013-05-09T16:37:49.007 回答
0

我使用find而不是where它的工作原理。

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

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

于 2013-05-09T16:41:36.907 回答