2010-02-02 28 views
2

我正在尋找一種通過選項傳遞給服務的寧靜方式。現在我在標準導軌方式的設備資源訪問具有:Rails:如何參數化訪問RESTful資源?

map.resources :devices, :member => [:historical] 

所以我可以得到我的設備與/devices/:id,我可以用/devices/:id/historical

我想實際上添加PARAM得到歷史數據到指定範圍的歷史網址上,因此當我查詢歷史數據時,我可以按小時,每天,每週,每月將其恢復。像/devices/:id/historical/:range

有沒有辦法修改我的路線設置以適應此?或者我只需要通過像/設備/:ID /歷史?範圍=小時

我寧願前者,但我不知道如果這是違反了瑞秋約定或什麼最好的方式去關於這個。

回答

1

我認爲你的問題真正歸結爲如何知道什麼時候將某些東西表示爲資源以及何時使用查詢字符串對其進行參數化。

我不知道你的域名,但從你的問題看來,有關設備的歷史數據是一個資源,並且通過一個範圍訪問該數據的子集最好用查詢字符串表示,就像你可能會分頁大量的項目。

要考慮的其他事情是緩存,因爲如果你想逐頁緩存每個範圍,那麼你將不得不在路由中使用路徑段,即:range。這樣Rails將在磁盤上生成一個唯一的HTML文件來表示該範圍。如果使用查詢字符串,那麼它將被有效地忽略,並且將針對不同的範圍返回相同的HTML文件。

+0

因此出於興趣的緣故,那麼您是否知道我可以如何將這個範圍添加到我的歷史URL中,除了編寫單獨的命名路線。有沒有在Rails中添加參數到路線的選項?我還沒有找到一個 – brad 2010-02-02 15:31:50

+1

@brad你可以傳遞url helpers的參數 link_to historical_reports_path(device,:range =>'daily') – Mereghost 2010-02-02 15:39:27

+0

Ya我意識到這一點,我更感興趣的是調整路線本身,以便它不是一個查詢字符串,但資源標識符 所以,不/ /設備/:編號/歷史?範圍=每天但/設備/:編號/歷史/:範圍 – brad 2010-02-02 15:46:11

1

將範圍作爲路徑段或查詢參數都可能是RESTful。

這個問題真的是一個設計問題。您是否想將歷史數據建模爲具有參數的單個資源,或者您是否想要爲多個資源建模?這與我們在做OO設計時做出的決定是一樣的。你想要一個帶有類型屬性的類還是一堆子類?還是數據庫設計,我們是否將數據存儲在多個表格中或一個表格中帶有鑑別器列?

只要您正確使用HTTP動詞來操縱該資源,那麼您就不會違反相關的REST約束。

0

這似乎對我來說是這樣的:

match 'devices/:id/historical/:range' => 'devices#historical_filter' 

可以幫助,但它需要你做更多的工作比你可能會喜歡的控制器(包括:身份證和:範圍變參數)。它強制你命名的路線,而不是足智多謀的路線路徑,但如果你的心被設置,而不是查詢參數,它可能值得一看。