2

对于我当前的路由,以下 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
4

1 回答 1

9

您可能希望使用您的路线resources :users,而不是resource :users.

另外,更改您link_to的使用,user_path而不是users_path

<%= link_to current_user.name, user_path(current_user) %>
于 2011-06-01T18:45:00.707 回答