2014-01-14 4 views
0

Я хочу изменить только пути к определенным действиям моего контроллера.Изменить путь для определенных действий

Например, у меня есть следующие действия на моем 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>

ответ

0

Вы должны сообщить подробности своей форме.

form_for @post ищет [POST] "/example"

Так используйте:

form_for [:admin, @post] 
+0

Это приводит к ошибке, я обновил свой вопрос с обновленной информацией. Спасибо, что посмотрели на это. –

+0

oh Isee, вы используете область, а не пространство имен ... mmm, почему вы сохраняете действия в одном контроллере, когда у вас есть админ/стандартная пользовательская логика? – apneadiving

+0

Ну, я защищаю действия с использованием метода before_action и хотел бы сохранить все действия для объекта в одном контроллере.На самом деле это просто косметическое изменение (более приятные URL-адреса). –

Смежные вопросы