5

scaffold を使用して生成したコントローラー内で独自のアクションを作成する際に問題が発生しています。

すべてが安らかなアクションにマップされていることは理解していますが、ユーザーがログイン/ログアウトできるユーザーコントローラーを構築していますが、アクションを作成してroutes.rbで宣言すると、ユーザー/ログインにアクセスするとこのエラーが発生します

Couldn't find User with id=login

login をアクションとして使用するのではなく、ID パラメーターとして使用しようとします。

Routes.rb

match 'users/login' => 'users#login'

私はルートで何か間違っていると思うので、誰かが私を助けることができればそれは素晴らしいことです.

ありがとう

4

1 に答える 1

9

routes.rb私はあなたがこのように見えると仮定します:

resources :users
match 'users/login' => 'users#login'

問題は、Rails が一致する最初のルートを使用することです。ドキュメントから:

Rails ルートは指定された順序で照合されるため、resources :photos上記の行get 'photos/poll'showアクションのルートがresources行の前に照合されますget。これを修正するには、線を線の上に移動して、最初get一致resourcesするようにします。

そのため、前に カスタムルートを定義してくださいresources :users:

match 'users/login' => 'users#login'
resources :users

…または、RESTful アクションを追加するには、次の構文を使用します。

resources :users do
  collection do
    match 'login'
  end
end

既存のルート (およびその順序) を確認するにrake routesは、コマンド ラインから実行します。

于 2012-07-06T08:33:16.483 に答える