0

認証に CanCan を使用していますが、名前にアンダースコアが含まれるクラス (message_board など) の認証を設定しようとする場合を除いて、正常に動作します。たとえば、次のようにするとうまくいきます。

アビリティ.rb

can [:read, :create, :destroy], Message do |message|
        message.user_id == user.access_id
      end

しかし、次を追加すると:

can [:create, :read], Message_board do |board|
        board.user_id == user.access_id
      end

認証が必要なことをしようとすると、次のエラーが表示されます。

LoadError in TimelinesController#show 
Expected {app_name}/app/models/message_board.rb to define Message_board

これを修正する方法はありますか?ありがとう!

4

1 に答える 1

1

これを修正する方法のアイデア: クラス名にアンダースコアを使用しないでください。

これは古いジョークの医者のように聞こえますが (患者:「医者、これをすると痛い!」 医者:「そんなことはしないでください」)、実際には理由があります。

Rails は、命名規則について非常に厳格です。MessageBoardクラス名は大文字のキャメルケース ( 、または) であることが期待されますFooBarThing。クラスを含むファイルは、下線付きの小文字バージョン (message_board.rbまたはfoo_bar_thing.rb) です。これは常にそうであるため、Rails は一方から他方への変換方法を「知っている」と考えます。したがって、指定された名前のクラスを含むファイルを探す場所を「知っている」のです。名前が期待どおりに並んでいない場合、問題が発生する可能性があります。他の形式で動作するように説得することはおそらく可能ですが、そうする理由は思いつきません.

于 2013-02-28T21:24:45.427 に答える