0

我有一个返回这个的 POST 方法:

Request Parameters:

{"cm_test_ids"=>["1",
 "8",
 "9",
 "10",
 "11"],
 "commit"=>"Create",
 "authenticity_token"=>"WiBZQcZt2/Vi2RiFdFtaXnthClLsMubXe6sAhUzOPo8=",
 "id"=>"1",
 "cm_test_campaigns_object"=>{"cm_test_campaign_id"=>"1",
 "comments"=>"",
 "assigned_to_id"=>"6"}}

在我的控制器应用程序中,我得到“cm_test_ids”,例如:

@ids_selected = params[:cm_test_ids]

在这一点上我没有问题,我可以将这些 id (1,8,9,10,11) 保存在关系表中,但如果我尝试这样做:

@my_tests = CmTest.find(["id IN (?)", @ids_selected])

我收到此错误:

"Couldn't find all CmTests with IDs (0,1,8,9,10,11) (found 5 results, but was looking for 6)"

它不退出的值“0”,我打印了数组@ids_selected,但我没有看到它,我不知道为什么总是在IDs数组的第一个位置添加一个“0”,知道吗?

4

4 回答 4

0

使用“解决”错误

CmTest.find_all_by_id(@ids_selected)

但是 find 仍然返回 nil,我想我找到了问题所在,生成的查询有很多 "\n" :

SELECT * FROM `cm_tests` WHERE (`cm_tests`.`id` IN ('id IN (?)','--- \n- \"1\"\n- \"8\"\n- \"9\"\n- \"10\"\n- \"11\"\n'))
于 2013-02-20T18:01:22.670 回答
0

你也可以试试

CmTest.where(id: @ids_selected )
于 2015-03-17T13:01:26.187 回答
0

Rails 在每次多选之前生成一个隐藏字段:

https://github.com/rails/rails/issues/5402

看起来空白字符串在某处被转换为整数,这会给你一个零。您可能需要从参数中删除它。

于 2013-02-20T12:19:09.123 回答
0

你可以试试这个:

CmTest.find_all_by_id(@ids_selected)
于 2013-02-20T11:35:46.247 回答