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)

しかし、それでも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.find_all_by_id(@ids_selected)
于 2013-02-20T11:35:46.247 に答える
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 に答える