【问题标题】:cancan accessible_by w/ mongoid criteria syntaxcancan access_by w/ mongoid 标准语法
【发布时间】:2012-04-27 18:21:19
【问题描述】:

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

【问题讨论】:

    标签: mongoid cancan


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多