Undefined метод `user_path '
Я пытаюсь создать модель пользователя вручную (без использования "resources: users" в файле routes.rb). Мой файл route.rb выглядит так:
match '/users/:id', :to => 'users#show'
match '/all_users', :to => 'users#index'
Это мой индексный метод в пользовательском контроллере:
def index
@title = "All users"
@users = User.paginate(:page => params[:page])
end
Это мой индексный указатель:
<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
<% @users.each do |user| %>
<li>
<%= link_to user.email, user %>
</li>
<% end %>
</ul>
<%= will_paginate %>
Я получаю это сообщение об ошибке, когда я нахожусь в localhost: 3000/all_users:
undefined method `user_path'
Я не вижу, откуда это происходит, может кто-нибудь помочь..?
EDIT:
Хорошо, я обнаружил, что изменение "пользователя" на "@user" в представлении делает работу:
<%= link_to user.email, @user %>
Но я действительно не понимаю сообщение об ошибке или реальную разницу между "пользователем" и "@user". Кроме того, нажатие на созданную ссылку не перенаправляется на страницу пользователя, она остается на localhost: 3000/all_users.
Ответы
Ответ 1
match '/users/:id', :to => 'users#show'
должен быть
match '/users/:id', :to => 'users#show', :as => :user
Параметр :as
сообщает маршрутизатору, как назвать маршрут (вы можете добавить _path
или _url
к какому-либо параметру :as
).
Кроме того, всякий раз, когда вы напрямую ссылаетесь на модель ActiveRecord (например, link_to user.email, user
), она попытается превратить user
в user_path
.
Ответ 2
Для всех, кто использует рельсы 4 в ваших маршрутах. rb post '/users', :to => 'users#create', :as => :user
и вы управляете render json: @user, status: :created, location: @user_path