Rails Routing: удалите суффикс редактирования для URL

Я создаю веб-сайт с модулем блога. Сообщение в блоге может быть черновиком или опубликовано.

Опубликованное сообщение больше нельзя редактировать, а черновик нельзя просмотреть (только редактировать)

В настоящее время у меня есть ресурс, определенный как

resources :posts, :path => "blog" do
  collection do
    get 'drafts'
  end
end

Я могу получить доступ к списку черновиков с помощью blog/drafts, создавать новые сообщения с помощью blog/new и редактировать черновики с помощью blog/:id/edit.

Однако я бы хотел, чтобы новые черновики создавались с помощью blog/drafts/new и редактировались с помощью blog/drafts/:id

Мне нужно определить маршруты new, create, edit и update, чтобы использовать эту новую схему. Маршруты new и create кажутся довольно простыми. Однако я не знаю, как обрабатывать маршрут edit, чтобы удалить часть имени действия.

Кроме того, просматривая определение маршрутов по умолчанию, я нашел в actionpack-3.2.9/lib/action_dispatch/routing/mapper.rb следующее:

member do
  get    :edit if parent_resource.actions.include?(:edit)
  get    :show if parent_resource.actions.include?(:show)
  [...]
end

Я не понимаю, как рельсы различают маршруты :edit и :show и соответственно сопоставляют URL-адреса.

Спасибо


person paul    schedule 16.12.2012    source источник


Ответы (1)


Вы можете использовать следующие маршруты. Имейте в виду, что для этого требуется другая файловая иерархия, rake routes должен быть вашим другом в этом.

namespace :blog do
  resources :drafts, :controller => :posts, only: [:new, :edit]
  resources :posts, only: :show
end
person Ahmad Sherif    schedule 16.12.2012