2

我正在尝试为唯一性验证提供自定义验证消息。但是,对于错误消息,我需要稍微复杂的行为,所以我将这个逻辑放在一个私有方法(error_message_for_email_uniqueness)中。

这是我正在使用的代码

validates_uniqueness_of :email, message: error_message_for_email_uniqueness

这是我得到的错误

/Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/attr_encrypted-1.2.0/lib/attr_encrypted.rb:229:in `method_missing': undefined local variable or method `error_message_for_email_uniqueness' for #<Class:0x00000103684198> (NameError)

我试过使用message: lambda { error_message_for_email_uniqueness },它也不起作用。另外,我尝试将它包装在 Proc 而不是 lambda 中,这对我没有任何帮助。

我怎样才能解决这个问题?

4

2 回答 2

2

您是否将 error_message_for_email_uniqueness 定义为类方法?

我做了一个快速测试,效果很好:

validates_uniqueness_of :email, message: Proc.new { error_message_for_email_uniqueness }

def self.error_message_for_email_uniqueness
  # logic to generate message goes here
end
于 2012-08-15T21:38:10.017 回答
0

如果要根据模型属性或其他内容动态创建消息,则应创建自定义验证器,因为消息应为字符串。

于 2012-08-15T21:42:14.123 回答