我已定义的资源,像这样: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