2

从我的实际数据库中抽象出来,我有 Model1 和 Model2 以及 Model1 has_and_belongs_to_many Model2 和 Model2 has_and_belongs_to_many Model1。在注册页面中,我有以下内容:

= f.hidden_field :model2_ids

但是,在数据库中没有现有模型 2 的情况下进行注册时,我收到以下错误:

"Couldn't find Model2 with id=0"

在参数中,您可以看到:

"model2_ids"=>"[]",

我想这评估为 NULL,这就是我得到错误的原因。我怎样才能解决这个问题?

更新:

通过在视图中设置条件,我可以通过没有现有模型 2 或没有设置模型 2_id 的注册来避免这个问题。model2_ids 是通过邀请模型在控制器中设置的,并且在某些注册情况下存在邀请,其中邀请模型指定了模型 2。在一个示例案例中,我在参数中看到:

 "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 回答