【发布时间】:2011-06-01 18:39:06
【问题描述】:
对于我当前的路由,以下 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
【问题讨论】:
标签: ruby-on-rails rails-routing