2

私の実際のデータベースから抽象化すると、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'

これは何が原因ですか?

4

2 に答える 2

1

ここでコントローラーでコントローラーをチェックインできますが、パラメーターが次のように見える場合は次のようになります

params[model_ids] = "" so query will be   if  params[model_ids] == ""

または、パラメータが\のように見える場合

params[model_ids] = [] so query will be   if  params[model_ids] == []

そして、あなたのパラメータが次のように見える場合

params[model_ids] = [""] so query will be   if  params[model_ids] == [""]

コントローラーでは、任意の条件を指定するか、例外処理を使用してこの実行時エラーを処理できます

于 2012-04-26T07:37:19.083 に答える
0

Model1 のオブジェクトがまだデータベースに保存されていない場合、Model1 に属する Model2 オブジェクトを取得するにはどうすればよいですか。

ユーザー用のフォームを作成している場合

<% form_for @user do |f|%>
<% end %>

次に、以下のような条件が必要になる場合があります

unless @user.new_record?
  <%= f.hidden_field :model2_ids %>
end
于 2012-04-26T05:23:45.917 に答える