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