5

我有一个这样定义的资源:

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 进入更新操作时,我希望发生某些事情,但我不想要求授权来执行此操作,并且我不想让基于控制器名称和简单的低 -编号的 ID。

如何完全替换rails 给出的默认路由?

4

1 回答 1

2

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 方法的路径,因此只有 put 请求将匹配

更多信息在这里 http://guides.rubyonrails.org/routing.html

于 2012-03-29T19:37:03.957 回答