我正在努力了解我的验证方法遇到了什么问题。
我安装了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
查看完整错误,违规模型(简化),测试用例和环境信息非常感谢任何见解。
答案 0 :(得分:2)
您的parse_name
方法以此行开头:
return false unless name.is_a?(String)
当您尝试验证它时,这表示该值不是字符串(可能为nil)。 validate_presence_of
的shoulda匹配器将使用零值测试它,这就是你失败的原因。