2

http://railscasts.com/episodes/63-model-name-in-urlをフォローして、次のようなURLを作成しようとしています。

/dog/<custom field of dog>

それ以外の

/dog/1

ここで、「1」はDogsテーブルの内部主キーです。私が欲しいカスタムフィールドは、たまたまDogsフィールドの別の整数です。

私のコード:

dogs_controller.rb:

load_and_authorize_resource :except => [:index]    
def show
       Rails.logger.info("Hello")
       @dog = Dog.find_by_custom_field(params[:id])
    end

dog.rb:

def to_param
    custom_field
end

特に、をロードしようとすると/dogs/<custom_field>、カスタムフィールドを検索するのではなく、その整数を主キーの検索として使用するように要求されます。だから私はを取得しCouldn't find Dog with id=<custom_field>ます。エラー

興味深いことに、これを実行しようとすると、ロガー行も印刷されません。ただし、load_and_authorize_resource(CanCan)行を削除すると、機能します。ここで何が起こっているのですか?

4

1 に答える 1

2

id pass:find_byオプション以外の別の属性を使用する場合

 load_and_authorize_resource :except => [:index]  , :find_by => :custom # will use find_by_custom!(params[:id])

詳細については、コントローラーメソッドのcancanマニュアルをお読みください http://rdoc.info/github/ryanb/cancan/master/CanCan/ControllerAdditions/ClassMethods

于 2012-10-22T06:18:39.383 に答える