неопределенный метод `user_path ' - PullRequest
27 голосов
/ 28 февраля 2011

Я пытаюсь создать модель пользователей вручную (без использования 'resources: users' в файле rout.rb). Мой файлways.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' на '@user' в представлении заставляет его работать:

<%= link_to user.email, @user %>

Но я действительно не понимаю сообщения об ошибке или реальной разницы между «user» и «@user». Плюс, нажатие на созданную ссылку не перенаправляет на страницу пользователя, оно остается на localhost: 3000 / all_users.

Ответы [ 2 ]

60 голосов
/ 28 февраля 2011
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.

1 голос
/ 07 февраля 2016

Для всех, кто использует rails 4 в ваших маршрутах. Rb post '/users', :to => 'users#create', :as => :user и ваш контроллер render json: @user, status: :created, location: @user_path

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...