2009-01-12 30 views
2

我想顯示一個比較頁面,以便用戶可以比較我的數據庫中的幾個對象的屬性。任何數量的對象都可以進行比較。我也希望它是可收藏的(所以'get')。如何在Rails中將靈活數目的ID傳遞給控制器​​?

我該如何構建控制器的URL /路由?

類似於/ foo_compare/1_5_22我將控制器中的ID分成1,5和22?

也許/ foo_compare/1/5/22,但我將如何設置路線?

+0

做一個好公民stackoverflow.com和一個標籤回答! – 2009-01-20 10:26:01

回答

5

我寧願

/compare?a=1&b=5&c=22 

的1_5_22僅僅是fugly,我認爲

/compare/1/5/22 

是一個非常不REST風格的路線。

+0

我同意。這意味着22嵌套在5內部,嵌套在1內。相反,這些ID都是對等的。 – 2009-01-12 16:53:43

4
a) url_for(:controller => "my_controlelr",:action => "compare", :id => [1,2,3,4]) becomes "id"=>"1/2/3/4" 

鏈路將my_controlelr /比較/ 1/2/3/4

b) url_for(:controller => "my_controlelr",:action => "compare", :ids => [1,2,3,4]) becomes "ids" => ["1", "2", "3", "4"] 

鏈路將my_controlelr /比較/?IDS [] = 1個& IDS [] = 2個& IDS [ ] = 3個& IDS [] = 4個

沒有特定的路由是必要的

+0

選項(b)似乎最乾淨 – 2009-01-14 19:03:03

4
# routes.rb 
map.connect 'compare/*:comparisons', :controller => 'whatever', :action => 'you_name_it' 

# in the controller 
ids = params[:comparisons].split('/') 

這映射到例如/比較/ 1/5/203中。

1

雖然我不喜歡下劃線,但我認爲劃定的方法是合理的。我可能會用';'

從邏輯上講,這是一個集ID,把它們作爲一個系列的參數不是很大,除非你真的要強制對他們的數量限制

相關問題