如何在rails中创建到阵列的路由

时间:2013-08-02 06:02:05

标签: ruby ruby-on-rails-3 routes

我想以CSV格式导出表格记录。因为我想将ID数组传递给我的控制器(比如'用户')动作(比如'export_csv')。

我已经创建了这样的路线

resources :users do
  collection do
    get "/export_csv/data", action: :export_csv, as: :export_csv
  end
end

在我的link_to标签中,我正在传递它

export_csv_users_path(@data) 

哪个生成这样的网址

/users/export_csv/data?format[]=1&format[]=2&format[]=3&format[]=4&format[]=5&format[]=6&format[]=7&format[]=8&format[]=9&format[]=10&format[]=11&format[]=12&format[]=13&format[]=14&format[]=15&format[]=16&format[]=17&format[]=18&format[]=19&format[]=20&format[]=21&format[]=22&format[]=23&format[]=24&format[]=25&format[]=26&format[]=27&format[]=28&format[]=29&...

由于哪个rails生成错误

406 Not Acceptable 

我想知道是否有任何方法可以通过路径传递id数组,类似这样的

/users/export_csv/data?format[]=[1,2,3,4,...]

请建议更好的方法。

2 个答案:

答案 0 :(得分:2)

您无法在url中将数组作为参数传递。如果要传递数组,可以组合数组值以形成字符串:

在视图中:

= link_to 'url_name', export_csv_users_path(:data => @data.join(','))

然后你可以在控制器中获取它并拆分以生成数组

array_element = params[:data].split(',')

答案 1 :(得分:2)

最好的方法是在post请求中传递这些参数作为数据。

尝试将其转换为(以及您对该方法的调用):

resources :users do
  collection do
    post "/export_csv/data", action: :export_csv, as: :export_csv
  end
end