我有一个用mongoid标准定义的能力,它不会填充mongoid标准选择器。
can :manage, Number, :issuer_id.in => user.owner_of.map{ |p| p.id }
返回
-> Number.accessible_by(Ability.new(user))
=> #<Mongoid::Criteria
selector: {},
options: {},
class: Number,
embedded: false>
如果我直接用相同的标准查询mongoid
-> Number.where(:issuer_id.in => user.owner_of.map{ |p| p.id })
=> #<Mongoid::Criteria
selector: {:issuer_id=>{"$in"=>[BSON::ObjectId('4f9ae0f1e1607c7a67000002')]}},
options: {},
class: Number,
embedded: false>
能力实例返回......
-> Ability.new(user)
=> #<Ability:0x007f8c9d0c1030 @rules=[
#<CanCan::Rule:0x007f8c9a5b0210
@match_all=false,
@base_behavior=true,
@actions=[:manage],
@subjects=[Number],
@conditions={issuer_id=>[BSON::ObjectId('4f9ae0f1e1607c7a67000002')]},
@block=nil
>
]>
我尝试过以各种方式定义自己的能力
can :manage, Number, :issuer => { :owner_id => user.id }
can :manage, Number, :issuer_id.in => user.owner_of.map{ |p| p.id }
can :manage, Number, :issuer_id => { "$in" => user.owner_of.map{ |p| p.id }}
答案 0 :(得分:2)
解决了它。 user.owner_of.map{ |p| p.id }
返回了一个BSON对象数组。我需要一系列字符串。 user.owner_of.map{ |p| p.id.to_s }
解决了它。 GAH!