私の実際のデータベースから抽象化すると、Model1 と Model2 と Model1 has_and_belongs_to_many Model2 と Model2 has_and_belongs_to_many Model1 があります。サインアップページには、次のものがあります。
= f.hidden_field :model2_ids
しかし、データベースに既存の model2 がない場合にサインアップすると、次のエラーが発生します。
"Couldn't find Model2 with id=0"
あなたが見ることができるparamsで:
"model2_ids"=>"[]",
これは NULL と評価されると思います。そのため、エラー I am が発生しています。どうすればこれを回避できますか?
アップデート:
ビューに条件を設定することで、既存の model2 がないか、model2_id が設定されていないサインアップでこの問題を回避できます。model2_ids は、招待モデルを介してコントローラーに設定されており、一部のサインアップ ケースでは、招待モデルが model2 を指定している招待があります。例のケースでは、params に次のように表示されます。
"model2_ids"=>"[1]",
ただし、同じエラーと、サーバー ログからの次の出力が表示されます。
Invitation Load (1.2ms) SELECT "invitations".* FROM "invitations" WHERE "invitations"."token" = '80c98940448829e7edc623f9886e6930434e245c' LIMIT 1
Model2 Load (51.8ms) SELECT "model2s".* FROM "model2s" WHERE "model2s"."id" = $1 LIMIT 1 [["id", 0]]
Completed 404 Not Found in 222ms
ActiveRecord::RecordNotFound (Couldn't find Listing with id=0):
app/controllers/registrations_controller.rb:12:in `create'
これは何が原因ですか?