假设您正在使用Rails,并且有一个带有嵌套模型的表单;例如,包含项目的项目和任务的表单。
然后假设每个任务必须有一个名称,但是用户不输入名称。当用户提交表单时,您使用
project.update_attributes(params[:project])
=> raises error
但是(如上所示)这会引发错误。是否有任何工具可以让任务中的错误渗透到项目级别,而不会引发错误?这样的工具可以大大减少重复,并且必须防止项目和其他子任务被保存在同一个“update_attributes”的调用中。
另一方面,我试图解决的问题是不必为大约30个模型重写渗透代码的问题,
答案 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,然后您可以获取错误列表