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 でラップしようとしましたが、どこにも行きません。

どうすればこれを回避できますか?

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 に答える