1

私はモンゴイド基準で定義された能力を持っています。それはモンゴイド基準セレクターにデータを入力していません。

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 に答える