5

以下が Rails 3 で機能しない理由がわかりません。「未定義のローカル変数またはメソッド `custom_message'」エラーが発生します。

validates :to_email, :email_format => { :message => custom_message }

def custom_message
  self.to_name + "'s email is not valid"
end

rails-validation-message-error の投稿で提案されていたように、代わりに :message => :custom_message を使用してみましたが 、うまくいきませんでした。

:email_format は、lib フォルダーにあるカスタム バリデーターです。

class EmailFormatValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      object.errors[attribute] << (options[:message] || 'is not valid')
    end
  end
end
4

3 に答える 3

2

参考までに、これは私が起こっていると信じていることです。「validates」メソッドはクラスメソッド、つまり MyModel.validates() です。これらのパラメーターを「validates」に渡し、「custom_message」を呼び出すと、実際には MyModel.custom_message を呼び出しています。したがって、次のようなものが必要になります

def self.custom_message
  " is not a valid email address."
end

validates :to_email, :email_format => { :message => custom_message }

validates の呼び出しの前に定義された self.custom_message を使用します。

于 2010-11-06T05:11:44.070 に答える
1

誰かが興味を持っているなら、私は私の問題に対する次の解決策を思いつきました:

モデル:

validates :to_email, :email_format => { :name_attr => :to_name, :message => "'s email is not valid" }

lib/email_format_validator.rb:

class EmailFormatValidator < ActiveModel::EachValidator

  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

      error_message = if options[:message] && options[:name_attr]
        object.send(options[:name_attr]).capitalize + options[:message]
      elsif options[:message]
        options[:message]
      else
        'is not valid'
      end

      object.errors[attribute] << error_message
    end
  end
end
于 2010-09-25T20:23:07.650 に答える
0

メソッド「custom_message」をバリデーションの上で定義する必要があるかもしれません。

于 2010-10-07T00:02:14.837 に答える