2012-04-27 6 views
1

私はmongoid基準で定義された能力を持っていますが、それはmongoid基準セレクタに値を設定していません。cancan accessible_by 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> 

私は

-> 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> 

能力インスタンスを返すと同じ基準でmongoid直接照会する場合は...

-> 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 }が解決しました。ガー!

+0

答えを「答え」にしてください。 – JJD