Ruby on rails Rails自定义验证消息和帮助器方法

Ruby on rails Rails自定义验证消息和帮助器方法,ruby-on-rails,ruby-on-rails-3,validation,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Validation,Ruby On Rails 3.2,我正在尝试向唯一性验证提供自定义验证消息。但是,对于错误消息,我需要稍微复杂的行为,因此我将此逻辑放在一个私有方法中(error\u message\u for\u email\u university) 这是我正在使用的代码 validates_uniqueness_of :email, message: error_message_for_email_uniqueness 这是我得到的错误 /Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/at

我正在尝试向唯一性验证提供自定义验证消息。但是,对于错误消息,我需要稍微复杂的行为,因此我将此逻辑放在一个私有方法中(
error\u message\u for\u email\u university

这是我正在使用的代码

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)
/Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/attr\u encrypted-1.2.0/lib/attr\u encrypted.rb:229:in'method\u missing':未定义的局部变量或方法'error\u message\u for#for_email\u university'(NameError)
我试过使用
message:lambda{error\u message\u for\u email\u university}
,这也不起作用。另外,我也尝试过用Proc而不是lambda来包装它,这对我来说毫无意义


我该如何解决这个问题?

您是否将电子邮件唯一性的错误消息定义为类方法

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

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

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

哦,我还没有尝试使用lambda和class方法。假设它是一个实例。你需要lambda的那些参数吗?如果没有这些参数尝试过,它似乎有效,我编辑了我的答案。您也可以参考:另外,您是否知道我如何/是否可以将记录传递到
错误消息\u以获得电子邮件\u唯一性
?我知道您可以传递错误和属性,但我需要检查正在保存的记录是否为新记录……问题是我真的不想重新创建
验证
的唯一性