Я хочу изменить только пути к определенным действиям моего контроллера.Изменить путь для определенных действий
Например, у меня есть следующие действия на моем ExampleController
.
- Новый
- Создать
- Редактировать
- Уничтожить
- Update
- Index
- Показать
Я хотел бы, чтобы мой new
, create
, delete
и update
действия на пути /admin/example/
и остальное (index
и show
) доступно на /example
.
Конечно, я могу сделать это, добавив новые маршруты, как:
match "/admin/example/:id/destroy", to: "example#destroy", via: "destroy"
Но я не хочу, чтобы сделать это для каждого контроллера. Я попытался сделать следующее:
scope '/admin' do
resources :example, only: [:new, :edit, :create, :update, :destroy]
end
resources :example, only: [:index, :show]
Это похоже на работу, но всякий раз, когда я хочу создать новый объект example
, он дает мне следующую ошибку:
No route matches [POST] "/example"
Он также заканчивается на URL /example
вместо /admin/example
Я нахожусь на правильном пути или я делаю что-то совершенно неправильное здесь. Я хотел бы сохранить все мои действия example
в одном контроллере.
Update: Я попытался следующие на основании ответа @apneadiving:
<%= form_for [:admin, @example] do |f| %>
<% end %>
Но его результаты в NoMethodError
, при визуализации формы, с сообщением:
undefined method 'admin_example_path' for #<#<Class:0x007ff3cceeb778>:0x007ff3cbe85820>
Это приводит к ошибке, я обновил свой вопрос с обновленной информацией. Спасибо, что посмотрели на это. –
oh Isee, вы используете область, а не пространство имен ... mmm, почему вы сохраняете действия в одном контроллере, когда у вас есть админ/стандартная пользовательская логика? – apneadiving
Ну, я защищаю действия с использованием метода before_action и хотел бы сохранить все действия для объекта в одном контроллере.На самом деле это просто косметическое изменение (более приятные URL-адреса). –