我需要一个错误对象来传递控制器和js视图之间的错误以获取ajax响应。我想使用ActiveModel :: Errors,因为我可以很容易地将模型验证中的错误合并到非模型错误中。但是我一直在使用这种方法遇到一些问题。
使用ActiveModel :: Errors.new(nil) 如果我尝试像这样调用to_a():
@errors = ActiveModel::Errors.new(nil)
@errors[:test] = "is a required field."
@errors.to_a().join("<br />")
我收到错误:
undefined method `human_attribute_name' for NilClass:Class
它尝试调用human_attribute_name为nil我传入Errors.new,这被认为是一个ActiveRecord模型。
我想知道是否有人知道更好的方法来处理错误,或者我采取的方法是否已被制作成某种宝石。
答案 0 :(得分:3)
有可能您的验证与可以封装在模型中的“某些东西”相关 - 它不需要是ActiveRecord模型。
您可以通过执行以下操作在任何普通红宝石对象中使用验证:
require 'active_model'
class Band
include ActiveModel::Validations
validates_presence_of :name
attr_accessor :name
end
然后,通常的嫌疑人会工作得很好:
b = Band.new
b.valid?
#false
b.name = "Machine Head"
b.valid?
#true