Замена маршрутов по умолчанию для ресурса в Rails 3 - PullRequest
5 голосов
/ 30 марта 2011

У меня есть ресурс, определенный следующим образом:

resources :referrals, :except => [:show, :edit, :destroy]

, и я бы хотел заменить (не просто добавить именованный маршрут) маршрут по умолчаниюкоторый производит Rails, в частности, тот, который используется для действия обновления.

Вот мои маршруты рейка:

referrals    GET  /referrals(.:format)     {:action=>"index", :controller=>"referrals"}
             POST /referrals(.:format)     {:action=>"create", :controller=>"referrals"}
new_referral GET  /referrals/new(.:format) {:action=>"new", :controller=>"referrals"}
referral     PUT  /referrals/:id(.:format) {:action=>"update", :controller=>"referrals"}
share             /share(.:format)         {:controller=>"referrals", :action=>"new"}
special           /special(.:format)       {:controller=>"referrals", :action=>"index"}
thanks            /thanks(.:format)        {:controller=>"pages", :action=>"thanks"}
                  /:shortlink(.:format)    {:controller=>"referrals", :action=>"update"}
                  /:linktext(.:format)     {:controller=>"referrals", :action=>"update"}
root              /(.:format)              {:controller=>"pages", :action=>"home"}

Я бы хотел либо

/:shortlink(.:format)

, либо

/:linktext(.:format)

для выполнения действия обновления, но не

/referrals/:id(.:format)

Это для реализации формы «безопасности», не связанной с паролем.Когда PUT переходит к действию обновления, я хочу, чтобы определенные вещи происходили, но я не хочу требовать авторизации для этого, и я не хочу позволять легко угадывать URL-адрес на основе имени контроллера и простого низкого уровня.пронумерованные идентификаторы.

Как мне полностью заменить маршрут по умолчанию, заданный rails?

1 Ответ

2 голосов
/ 29 марта 2012

resources :referrals, :except => [:show, :edit, :destroy, :update]

match "/whatever_you_want/:variable_here" => "referrals#updated", :as=> the_link, :via=> :put

, затем в вашем контроллере вы получите доступ к параметру с помощью

params[:variable_here]

здесь параметрвсе, что вы хотите сравнить в БД, и путь будет создан следующим образом:

the_link_path или the_link_url

часть: via будет ограничивать путь для каждого метода HTTP, поэтомубудет соответствовать только поставленный запрос

подробнее здесь http://guides.rubyonrails.org/routing.html

...