比我目前正在做的更好的错误处理?

时间:2011-12-09 00:20:21

标签: ruby-on-rails ruby error-handling gem

我需要一个错误对象来传递控制器和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模型。

我想知道是否有人知道更好的方法来处理错误,或者我采取的方法是否已被制作成某种宝石。

1 个答案:

答案 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