是否有插件/ gem允许您从rails中的子模型继承错误?

时间:2011-03-02 14:57:26

标签: ruby-on-rails ruby ruby-on-rails-3 validation

假设您正在使用Rails,并且有一个带有嵌套模型的表单;例如,包含项目的项目和任务的表单。

然后假设每个任务必须有一个名称,但是用户不输入名称。当用户提交表单时,您使用

project.update_attributes(params[:project]) 
=> raises error

但是(如上所示)这会引发错误。是否有任何工具可以让任务中的错误渗透到项目级别,而不会引发错误?这样的工具可以大大减少重复,并且必须防止项目和其他子任务被保存在同一个“update_attributes”的调用中。

另一方面,我试图解决的问题是不必为大约30个模型重写渗透代码的问题,

1 个答案:

答案 0 :(得分:1)

来自关联的验证错误应该在父级的#errors方法中可用。例如,如果“Foo”有一个“Bar”:

ruby-1.9.2-p136 :001 > s = Foo.new
 => #<Foo id: nil, created_at: nil, updated_at: nil, enabled: true, alpha: nil> 
ruby-1.9.2-p136 :002 > s.build_bar
 => #<Bar id: nil, created_at: nil, updated_at: nil, foo_id: nil, beta: nil> 
ruby-1.9.2-p136 :003 > s.save
 => false 
ruby-1.9.2-p136 :004 > s.errors.full_messages
 => ["Alpha is invalid", "Bar beta can't be blank"] 
ruby-1.9.2-p136 :005 > 

此外,如果验证失败,我认为您的模型不应该引发异常(如果这是“引发错误”的意思)。您应该看到#update_attributes返回false,然后您可以获取错误列表