如何将灵活数量的id传递给Rails中的控制器?

时间:2009-01-12 08:54:26

标签: ruby-on-rails ruby url

我想显示一个比较页面,以便用户可以比较我数据库中多个对象的属性。可以比较任意数量的对象。我也喜欢它是可收藏的(所以'得到')。

我应该如何构建控制器的URL /路由?

像/ foo_compare / 1_5_22那样我把ID分成控制器中的1,5和22?

也许/ foo_compare / 1/5/22,但我如何设置路线?

4 个答案:

答案 0 :(得分:5)

我更喜欢

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

1_5_22只是很难看,我认为

/compare/1/5/22

是一条非RESTful路线。

答案 1 :(得分:4)

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

链接是my_controlelr / compare / 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 / compare /?ids [] = 1& ids [] = 2& ids [] = 3& ids [] = 4

无需特殊路线

答案 2 :(得分:4)

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

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

这映射到例如/比较/ 1/5/203

答案 3 :(得分:1)

虽然我不喜欢下划线,但我认为划定方法是合理的。我可能会用';'

从逻辑上讲,这是一组ID,将它们作为一系列参数公开并不是很好,除非你真的想强制限制它们的数量