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

Разница между ресурсами и контроллерами

когда я делаю

rails g model user name:string
rails g controller users index create new destroy show

и отредактируйте config/routes.rb, чтобы добавить:

resource :users

Объединяет exec 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"}

однако, когда я делаю

rails g resource users name:string

(который автоматически добавляет ресурсы: users to config/routes.rb)   трассировка рейка

Я получаю

    users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
          POST   /users(.:format)          {:action=>"create", :controller=>"users"}
 new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
     user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
          PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
          DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}

Итак, мой вопрос:

когда я создаю контроллер, как я могу получить правильные вспомогательные методы для создания link_to 'Destroy', instance,: method = > : delete работать?

Так как в настоящее время он дает ошибку, то user_path не определен.

4b9b3361

Ответ 1

Вы должны позвонить

rails g controller user index create new destroy show

вместо

rails g controller users index create new destroy show

чтобы получить resources :users, чтобы дать вам нужные помощники.

Последнее приводит к тому, что Rails предполагает, что users является особым объектом и что resources :users должен создавать то, что называется особым ресурсом:

http://guides.rubyonrails.org/routing.html#singular-resources

user_path - undefined, тогда как users_path определяется.

Ответ 2

Когда вы используете rails g controller и указываете имена методов, генератор только отображает определенные маршруты в файл маршрутов. rails g resource предполагает, что вы хотите использовать всю функциональность ресурса и отобразите resources.

Чтобы исправить это, просто зайдите в свой файл маршрутов и замените конкретные сопоставления вызовом ресурсов.

resources :users

Ответ 3

Я действительно хотел создать рабочий (с правильным контроллером delete/show paths) для существующей модели (как описано в вопросе), но просто добавить "resource: x" и генерировать контроллер было недостаточно.

В итоге я использовал генератор scaffold_controller. Он не создает никаких миграций или моделей, но он генерирует ресурс с представлениями, а команда rake paths показывает правильные пути для удаления и показывать, чтобы работать.

Ответ 4

В консоли можно запускать следующие команды:

$rails g model user name:string
$rails g scaffold_controller User

И добавьте эту строку кода в файл routes.rb:

resources :users