【发布时间】:2011-09-30 05:22:19
【问题描述】:
我有几个 before_validation 回调,它们对我的模型上设置的属性进行操作。当我遇到这样的情况时,我会遇到麻烦:
class Foo < ActiveRecord::Base
before_validation :capitalize_title
validates :title, :presence => true
def capitalize_title
title.upcase
end
end
我编写了一个测试以确保不允许使用“nil”标题,但由于未定义 nil.upcase,因此测试出错。我想处理这个错误,但我已经有在 before_validation 回调之后运行的错误处理。
如果可以避免的话,我不想检查所有 before_validation 回调以确保数据存在。
是否有一种干净或可接受的方式来处理这种情况?
【问题讨论】:
-
captialize_title方法应该有一个检查,正如 mu 所建议的那样。如果您要直接从某些代码中调用该方法并且title为 nil 怎么办 - 您会收到错误,因此该代码原样不好。此外,在这种情况下,您正在对方法进行检查,而不是对before_validate回调进行检查 - 不确定在回调周围进行检查是什么意思。
标签: ruby-on-rails ruby-on-rails-3.1