尝试Find_by_id时出错,出现一个额外的值(Ruby on Rails)

时间:2013-02-20 09:45:54

标签: ruby-on-rails ruby

我有一个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”在第一个位置,任何想法?

4 个答案:

答案 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 )