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

def users配列の代わりにMongoid::Criteria を返さなければならないと思うので、そうすることができます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 に答える