2012-04-27 28 views
1

我有一个用mongoid条件定义的能力,即没有填充mongoid条件选择器。cancan accessible_by w/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 }} 

回答

2

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

+0

然后请将您的答案标记为“答案”。 – JJD 2013-01-03 22:25:09