0

Rails 4 アプリで CanCanCan を使用して機能を定義しようとしています。

私はこの能力を私の能力.rbファイルに持っています:

can :read, Proposal, 
      { :expiry_date > Time.now, 
        :sweep => { :disclosure => { :allusers => true } } 
      }

syntax error, unexpected ',', expecting =>
      { :expiry_date > Time.now, 

Time.now の後のコンマを削除しようとすると、次のエラーが発生します。

syntax error, unexpected '\n', expecting =>
/Users/ml/f4/c2/app/models/ability.rb:107: syntax error, unexpected '}', expecting keyword_end

これらのエラー メッセージが何を意味し、何をしたいのかを解読する方法がわかりません。最初の形式では、コンマを => に置き換えることが正しい理由がわかりません。なぜなら、そのエラーに対して評価する必要がある 2 つの別個の属性があるからです。

2番目のエラーについては、クラスに入る必要がある他の能力の長いリストがあるため、その時点で「終了」する理由がわかりません。

このエラーは、Time.now 参照を使用しようとしたことと関係があるのでしょうか。それは能力ファイルで有効な機能ではありませんか? もしそうなら、属性の日付が能力がテストされている日付よりも遅いかどうかを確認する別の方法はありますか?

これをブロックにしようとすると、次のようになります。

  can :read, Proposal do | prop |
  {:expiry_date > Time.now, 
    :sweep => { :disclosure => { :allusers => true } } 
  }
  end

次のエラーが表示されます。

syntax error, unexpected ',', expecting =>
      {:expiry_date > Time.now, 

そして、=>をどこに置くべきかわからないので、私は再び立ち往生しています

外側の中括弧を削除しようとすると、ブロックは次のようになります。

can :read, Proposal do | prop |
      :expiry_date > Time.now, 
        :sweep => { :disclosure => { :allusers => true } } 

      end

次のエラーが表示されます。

syntax error, unexpected ',', expecting keyword_end
      :expiry_date > Time.now, 

だから、ランダムなことを試してみて、括弧を次のように変えようとしました:

can :read, Proposal do | prop |
      [:expiry_date > Time.now & :sweep => { :disclosure => { :allusers => true } } ]
      end

(したがって、外側のレベルの中括弧の代わりに角括弧を使用します) - もうその行で停止することはありません。なぜそれが機能するのかは本当にわかりませんが(シードデータでまだテストしていません)、エラーがスローされるのを止めました.

ありがとうございました

4

1 に答える 1

1

持っていることに気づきましたか

{:expiry_date > Time.now,

それ以外の

{:expiry_date => Time.now,

構文エラーに注意してください。

于 2015-09-05T05:04:29.873 に答える