我有一个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我也没看到它,我不知道为什么总是在ID数组中添加一个“0”在第一个位置,任何想法?
答案 0 :(得分:0)
你可以试试这个:
CmTest.find_all_by_id(@ids_selected)
答案 1 :(得分:0)
Rails在每次多选之前生成一个隐藏字段:
https://github.com/rails/rails/issues/5402
看起来空字符串被转换为某个整数,这会给你一个零。您可能需要将其从参数中删除。
答案 2 :(得分:0)
使用
“解决”错误CmTest.find_all_by_id(@ids_selected)
但是发现仍然返回nil,我想我发现了问题,生成的查询有很多“\ n”:
SELECT * FROM `cm_tests` WHERE (`cm_tests`.`id` IN ('id IN (?)','--- \n- \"1\"\n- \"8\"\n- \"9\"\n- \"10\"\n- \"11\"\n'))
答案 3 :(得分:0)
您也可以尝试
CmTest.where(id: @ids_selected )