Подтвердить что ты не робот

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.

4b9b3361

Ответ 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