2012-04-26 101 views
2

从我实际的数据库抽象“无法使用id = 0找到模型”,我有模型1和模型2和模型1 has_and_belongs_to_many模型2和模型2 has_and_belongs_to_many型号1。在注册页面,我有以下几点:如何处理错误

= 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' 

是什么原因造成的?模型1的

+0

你能后的模型你用来创建关联的代码? – paniwani 2012-04-26 04:39:53

+0

如果要重定向登录成功之后,用户? – Suborx 2012-04-26 05:20:16

回答

0

对象,你怎么能得到属于模型1的模型2对象尚未保存到数据库中即可。

如果你正在构建的形式为用户

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

那么你可能需要一个条件类似下面

unless @user.new_record? 
    <%= f.hidden_field :model2_ids %> 
end 
1

在这里,在控制器,你可以在控制器检查,但它会像 如果你的参数看起来像

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

或如果你的p arams看起来像\

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

,如果您的PARAMS看起来像

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

现在控制器,你可以给任何条件或使用异常处理来处理这个运行时错误

+0

它适合你吗? – SSP 2012-09-21 10:06:30