2011-02-04 47 views
2

我有一个双头问题,我希望你能帮助我。Rails路线和URL参数

作为一个上下文,我有一个带有Request模型/控制器/视图设置的Rails应用程序。它用于向另一个用户发送请求,并在更新操作中提供两个特定功能(试图保持REST风格) - 接受并拒绝(接受或拒绝请求)。

所以我的问题是:

  • 首先,什么是普遍接受的方法建立的URL访问特定类型的动作(在这种情况下接受或拒绝都要求更新)?它是更好它使用一个参数(例如/requests/11?response=accept)通过或使用命名的路线(例如/requests/11/accept

  • 其次,如果使用命名的路线,你怎么能确定哪个命名的路线是负责调用控制器?我认为你可以使用request.url()或类似的东西来检查实际的网址(例如/requests/11/accept),但这似乎是一个脆弱的方法给我。我试图找到其他可能的方式来做到这一点,但似乎找不到一个体面的方式。

回答

1

我喜欢/请求/ 11 /接受/请求/ 11?响应=接受。

接受和拒绝是会改变请求资源状态的行为,所以对单个对象的PUT操作是适当的。

你可以在你的路由配置定义路由,如下图所示:

resources :requests do 
    member {put :accept, :decline} 
end 

您将获得两个途径

accept_request maps to {:action=>"accept", :controller=>"requests"} 
decline_request maps to {:action=>"decline", :controller=>"requests"} 
+0

要添加到您的回答,我认为任何一个动作/动词可能属于一条路线(IMO是RESTful理想的目标)。作为变量/形容词的任何东西,即。 `page = 2`或`gender = male`可能是一个查询字符串(尽管常见的通常也是路由)。 – Azolo 2012-01-08 05:07:53