1

私のroutes.rbは次のとおりです

resources :users  
match 'users/login'

レーキルートショー

users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
      POST   /users(.:format)          {:action=>"create", :controller=>"users"}
new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
  edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
       user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
            PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
            DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}
users_login        /users/login(.:format)    {:controller=>"users", :action=>"login"}

しかし、私がするとき

http://localhost:3000/users/login

/user/show に移動します。コンソールに表示されるため、なぜそれが起こっているのか理解できます

Processing by UsersController#show as HTML
Parameters: {"id"=>"login"}

これはどのように解決できますか。

ハーシット

4

4 に答える 4

1

のルートshowが優先され、Rails は「ログイン」を ID と見なします。目的を達成するには、次の方法でルートを定義する必要があります。

resources :users do
  collection do
    get :login
  end
end
于 2012-06-25T18:32:28.783 に答える
0

コントローラでメソッドhttp://localhost:3000/users/loginをポイントする場合は、routes.rbでこれを行う必要があります。loginusers

get 'users/login' => 'users#login'

また、これは下にある必要はありませんresources :users

于 2012-06-25T18:54:27.527 に答える
0

match 'users/login'上に配置しますresources :users。URL を照合する場合、Rails は URL 形式に適合する routes.rb 内の最初のパスを選択します。現状では、'users/:id' が 'users/login' と一致しているため、id=login となります。

于 2012-06-25T18:32:13.543 に答える
0

routes.rb以下のコードに一致するようにファイルを変更してみてください。これにより、 ルート'users/login'の前に一致することが保証されresources :usersます。It に変更matchすると、リクエストが行われたget場合にのみそのルートにも一致します。GET

ルート.rb

get 'users/login'
resources :users  

参考文献

于 2012-06-25T18:38:35.373 に答える