cancan accessible_by w / mongoid标准语法

时间:2012-04-27 18:21:19

标签: mongoid cancan

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

1 个答案:

答案 0 :(得分:2)

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