我已定義的資源,像這樣:Rails中更換默認路由的資源3
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,編號的ID。
我該如何充分取代由rails給出的默認路由?
更多信息在路線的ID沒有被模型ID它可以是任何URL編碼屬性,例如隨機散列字符串。這樣做可以節省彎曲導軌,使其不會彎曲。 – 2011-03-30 22:35:18
謝謝@ Douglas-F-Shearer!我只是通過覆蓋Referral模型的'to_param'方法來使用你所說的內容來返回url構造中的params的shortlink屬性而不是模型ID。現在通過使用'find_by_shortlink(params [:id])''我可以做我想做的事情,同時防止簡單號碼工作 – Bodhi 2011-03-30 22:51:33
有趣的是,'to_param'重寫只是爲了使'referral_url'正確工作這當然是一件好事)。嚴格地說,我可以在我的控制器中純粹用我的'find_by_shortlink(params [:id])'完成我在問題中提出的問題。 – Bodhi 2011-03-30 22:58:17