Для моей текущей маршрутизации следующий код 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 =, таким как /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"}
Проблема здесь в том, что пользователи # show, по-видимому, заняли место индекса # пользователей, что было бы правильным для / users. Поскольку это все в значительной степени стандартная маршрутизация без каких-либо настраиваемых маршрутов с точки зрения рассматриваемой проблемы, я совершенно не в курсе. Есть идеи?
Редактировать: код пользователя # show так же прост:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end