2011-02-04 79 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