从我的实际数据库中抽象,我有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,这就是我收到错误的原因。我怎么能绕过这个?
更新
通过在视图中设置条件,我可以通过注册避免此问题,其中没有现有的model2,或者没有设置model2_ids。 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'
造成这种情况的原因是什么?
答案 0 :(得分: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] == [""]
现在在控制器中你可以给出任何条件或使用异常处理来处理这个运行时错误
答案 1 :(得分:0)
Model1的对象尚未保存到数据库中,那么如何获取属于Model1的Model2对象。
如果您要为用户构建表单
<% form_for @user do |f|%>
<% end %>
然后你可能需要一个类似下面的条件
unless @user.new_record?
<%= f.hidden_field :model2_ids %>
end