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

放在match 'users/login'上面resources :users。在匹配 url 时,rails 会选择 routes.rb 中符合 url 格式的第一个路径。就目前而言,它发现 'users/:id' 匹配 'users/login',因此 id=login。

于 2012-06-25T18:32:13.543 回答
0

尝试更改您的routes.rb文件以匹配下面的代码。这将确保 在路由'users/login'之前匹配。resources :users更改match为It 也将仅在发出请求get时匹配该路由。GET

路线.rb

get 'users/login'
resources :users  

参考

于 2012-06-25T18:38:35.373 回答
0

如果您希望在控制器http://localhost:3000/users/login中指向您的login方法users,您只需要在您的 routes.rb 中执行此操作

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

这也不需要在resources :users

于 2012-06-25T18:54:27.527 回答