我有一个任务模型,可以将其分配给其他类型的其他模型:
class Task
include Mongoid::Document
field :assigned, type: Reference
end
引用由一个对象和一个reference_id组成:
class Reference
attr_reader :object, :reference_id
#mongoize....
#demongoize ...
#
end
我还有一个模型组:
class Group
include Mongoid::Document
field :members, type: Array
end
此模型组具有一个带有对其他对象(用户,个人资料等)的引用的数组
现在我有一个用户ID:user_id,我有一个数组,其中包含Group ID:groups(用户所属的组)。
g=Group.where(:members.in => [{object: "User", reference_id: user_id}])
groups=[]
g.each do |group|
groups << group.id.to_s
end
我想设置我的Task模型的default_scope,以便仅选择Tasks,其中Task分配给具有已知user_id的用户,或者任务分配给一个组,而user_id的用户属于该组: / p>
default_scope -> {where('$or' => [
{assigned: {object: "User", :reference_id=> user_id}},
{assigned: {object: "Group", :reference_id.in => groups}},
])}
如果我的任务分配给了用户,这将起作用-但如果将任务分配给了一个组,它将不起作用。似乎“:reference_id.in =>组”无效。
更好的是,我之前不需要创建具有组的数组,但可以仅基于user_id进行整个查询。
有什么想法为什么不起作用-或有一个想法如何使默认范围更好?
在此默认范围内,我要实现的是预先过滤分配给用户或用户所属组的所有任务。
谢谢, 迈克尔