私の現在のルーティングでは、次の 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