error.add和有效的问题?

时间:2015-06-17 11:54:33

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

我必须导入大的CSV表格。我的代码搜索数据库中的现有对象,否则我创建一个新实例。

我希望在必须验证我的模型之后添加自定义错误消息。

这是我的代码示例:

def customer_validate
  p = Customer.new(customer_params)
  p.errors.add(:name, "here my error message")
  p.valid?
  return p
end

问题: p.valid后,所有错误都会丢失?如何组合自定义错误消息并且有效?消息?

2 个答案:

答案 0 :(得分:1)

你不能。运行valid?时,将清除所有现有错误。有一些可能的解决方法。

一种简单的可能性是切换订单。

def customer_validate
  c = Customer.new(customer_params)
  c.valid?
  c.errors.add(:name, "here my error message")
  c
end

您可以使用

检查客户是否有效
customer = customer_validate
customer.errors.any?

另一种方法是将错误附加到临时客户对象,在主对象上运行valid?,然后合并两个错误列表。

作为旁注,请不要将变量命名为p,因为p是Ruby中的一种方法,您最终会将其隐藏起来。

答案 1 :(得分:0)

或者你可以像下面这样使用after_validation。

  after_validation do
    errors.add(:name, 'abc')
  end