2011-07-27 18 views
0

私がこのお持ちの場合:Rails CanCan、Rails.logger.infoがないと失敗します---なぜですか?

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
    Rails.logger.info 'XXXX' 
end 

をカンカンが正常に動作しますが、私はロガーを削除した場合、それは失敗します。

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
end 

任意のアイデアカンカンで、ここで何が起こっているのか?または私のコード? :)おかげfine manualから

答えて

4

条件のハッシュはあなたに定義する能力を超える十分なコントロールが得られない場合は、あなたが望む任意のRubyのコードと一緒にブロックを使用することができます。

ブロックがtrueを返す場合、ユーザーはそのプロジェクトの更新能力を持っています。そうでなければ、彼はアクセスが拒否されます。ブロックを使用することの欠点は、データベースクエリの条件を生成するために使用できないことです。

あなたの最初のブロック:Rails.logger.info 'XXXX'戻り"XXXX\n"infoaddための単なるラッパーであり、それはにISNとして何addリターンを見るために、ソースを読まなければならないので

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
    Rails.logger.info 'XXXX' 
end 

は常に真の値を返します。非常によく書かれている)。ただRails.logger.info呼び出し、ブロックの戻りなし:

wall_member.try(:user_id) == current_user.id 

、それはあなたのために偽でなければなりません。

関連する問題