1

我有一个用 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 }}
4

1 回答 1

2

解决了。user.owner_of.map{ |p| p.id }正在返回一个 BSON 对象数组。我需要一个字符串数组。user.owner_of.map{ |p| p.id.to_s }解决了。啊!

于 2012-04-28T00:34:32.287 回答