对于我当前的路由,以下 ruby on rails 代码:
<%= link_to current_user.name, users_path(current_user) %>
这会产生如下链接:
<a href="/users.1">name</a>
反过来,Ruby on Rails 很难理解这一点,因为它期望1
是以下格式:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User without an ID
Request
Parameters:
{"format"=>"1"}
对于 Rails 来说,这样路由它并不完全有意义,因为它更应该是/users/1
. 但是,手动尝试会得到以下结果:
Routing Error
No route matches "/users/1"
使用 ?id= 参数手动输入 ID,例如/users?id=1
,可以正常工作。
问题是,我不明白 users.id 来自哪里,也不知道如何修复 - 我的路由文件看起来像
routes::Application.routes.draw do
get "register" => "users#new", :as => "register"
get "login" => "sessions#new", :as => "login"
post "login" => "sessions#create", :as => "do_login"
get "logout" => "sessions#destroy", :as => "logout"
resource :users
root :to => "pages#welcome"
end
除了上面提到的之外,所有操作都可以正常工作,但我想找出原因。rake routes
如下所示:
users POST /users(.:format) {:action=>"create", :controller=>"users"}
new_users GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_users GET /users/edit(.:format) {:action=>"edit", :controller=>"users"}
GET /users(.:format) {:action=>"show", :controller=>"users"}
PUT /users(.:format) {:action=>"update", :controller=>"users"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"users"}
这里的问题似乎是 users#show 似乎已经取代了 users#index,这对 /users 来说是正确的做法。由于就手头的问题而言,这几乎都是默认路由,没有自定义路由,所以我在这里一无所知。有任何想法吗?
编辑: users#show 代码很简单:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end