0

我很难理解我的验证方法有什么问题。

我安装了 shoulda,当我尝试使用它时,它会出现一个奇怪的未定义方法NoMethodError: undefined method '[]' for false:FalseClass,这很奇怪。

我把它缩小到这段有问题的代码:

validates_each :name do |record, attr, value|
  name_hash = self.parse_name(value)
  record.errors.add attr, 'must have a first and last name' if
    ( name_hash[:first_name].nil? || name_hash[:last_name].nil? )
end

您可以在gist-596202中查看完整错误、违规模型(简化)、测试用例和环境信息

任何见解将不胜感激。

4

1 回答 1

2

您的parse_name方法从这一行开始:

return false unless name.is_a?(String)

这表明当您尝试验证该值时,该值不是字符串(可能为 nil)。shoulda 匹配器validate_presence_of将使用 nil 值对其进行测试,这就是您失败的原因。

于 2010-09-24T23:39:05.707 回答