如何使用coffeescript和data-attributes生成params数组?

时间:2013-10-02 02:34:28

标签: ruby-on-rails coffeescript

在Rails 3.2应用程序中,我有一个coffeescript函数,它从带有“selected”数据属性的元素返回一个ID号数组。

#view (pseudo code!)
<table id='elems_container' data-url=<%= my_path(@object%) >
  <tr data-selected = 'true' data-id = '1'></tr>
  <tr data-selected = 'true' data-id = '2'></tr>
  <tr data-selected = 'false' data-id = '3'></tr>
  <tr data-selected = 'true' data-id = '4'></tr>
</table>

#coffeescript
elems = $("tr[data-selected='true']").map(->
  $(this).data "id"
).get()
$.ajax({ url: $('#elems_container').data('url'), dataType: "script", data: { 'selected_ids': elems } })

这会在日志中返回以下内容

Started GET "/my/path?selected_ids%5B%5D=1&selected_ids%5B%5D=2&selected_ids%5B%5D=4

我现在想在控制器中选择这些选定的ID

@collection = Model.where('id = ?', params[:selected_ids])

相反,这将返回所有模型,而不仅仅是参数中列出的模型。

获取URL是否正确,或者params数组是否应该看起来不同?还有什么我做错了?

1 个答案:

答案 0 :(得分:2)

如果对查询字符串进行URI解码,您将看到:

selected_ids[]=1&selected_ids[]=2&selected_ids[]=4

当Rails看到方括号[]时,它会在params[:selected_ids]中创建一个数组,其中包含查询字符串中的值,并且您['1','2','4']中有params[:selected_ids] }。

当您要检查多个值时,您需要的SQL是:

where id in (1,2,4)

ActiveRecord非常聪明,可以在您提交像这样的数组时使用in运算符:

where(:some_column => some_array)

所以你应该说:

@collection = Model.where(:id => params[:selected_ids])

并获取您在@collection中寻找的内容。