2

我想给自定义验证消息进行唯一性验证。但是,对于错误消息,我需要稍微复杂的行为,所以我将这个逻辑放在私有方法中(​​)。使用帮助器方法的Rails自定义验证消息

下面是我使用

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,这不会让我在任何地方。

我该如何解决这个问题?

回答

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 
+0

哦,我没有尝试过使用lambda和class方法。假设它会是实例。你需要拉姆达的那些参数吗? – varatis 2012-08-15 21:41:22

+0

尝试没有参数,它似乎工作,我编辑我的答案。你也可以参考:http://stackoverflow.com/questions/6073303/how-to-customize-rails-activerecord-validation-error-message-to-show-attribute-v – 2012-08-15 21:42:20

+1

另外,你会碰巧知道如何/如果我可以将记录传递给'error_message_for_email_uniqueness'?我知道你可以通过错误和属性,但我需要检查记录被保存是新的还是不是...... – varatis 2012-08-16 14:53:54

0

如果你想动态基于模型属性什么的,你应该创建自定义的验证,因为消息预计将字符串创建消息。

+0

问题是我真的不想重新创建'validates_uniqueness_of' – varatis 2012-08-15 21:43:00