Действие редактирования контроллера Rails - как избежать отображения идентификатора? - PullRequest
2 голосов
/ 15 марта 2011

У меня есть ресурс с именем offer.Когда я редактирую предложение, URL выглядит как «/ offer / 1 / edit».Как можно избежать полного отображения идентификатора в URL-адресе?

Вместо этого я хочу сохранить идентификатор предложения в сеансе, поскольку действия предложения должны быть общедоступными.Я боюсь, если кто-то попытается ввести разные идентификаторы в URL вручную.Возможно ли это?

Мой желаемый URL будет выглядеть так: «/offers/edit договор.

Действие создания отвечает так: рендер« редактировать ».Здесь идентификатор не отображается, URL-адрес просто «/ предложения», хорошо.

Но этот ответ (рендер "изменить") приводит к повторному отображению URL-адреса с идентификатором, grrr.

Есть ли решение для этого?

Спасибо за вашу помощь!Marc

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Вы можете перезаписать метод to_param в вашей модели

def to_param
  your_item.name.parameterize
end

, тогда маршрутизатор выдаст что-то вроде этого

0 голосов
/ 15 марта 2011

Вы можете (хотя это своего рода неправильное использование) использовать сопоставление ресурсов вместо ресурсов.

Вы можете добавить resource :offers в ваш route.rb.

Это даст вам такие маршруты:

     offers POST   /offers(.:format)      {:action=>"create", :controller=>"offers"}
 new_offers GET    /offers/new(.:format)  {:action=>"new", :controller=>"offers"}
edit_offers GET    /offers/edit(.:format) {:action=>"edit", :controller=>"offers"}
            GET    /offers(.:format)      {:action=>"show", :controller=>"offers"}
            PUT    /offers(.:format)      {:action=>"update", :controller=>"offers"}
            DELETE /offers(.:format)      {:action=>"destroy", :controller=>"offers"}

В качестве альтернативы я бы просто не использовал стандартное отображение редактирования и добавил свое собственное:

resources :offers, :except => [:edit, :update] do
  get :edit, :on => :collection
  put :update, :on => :collection
end

Если память мне не изменяет, в Rails 2.3.x должно работать следующее:

map.resources :offers, :except => [:edit, :update], :collection => { :edit => :get, :update => :put }

У меня нет такой удобной среды, поэтому я не могу проверить это сейчас ...

...