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_pathusers_path

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