ローカルシステムで正しく動作するモデルバリデーションを持つフォームがありますが、ライブサイトでチェックすると、モデルのバリデーションオーダーの順序は変更されますが、コードは同じですどちらも。 Ruby on Railsカスタムモデルバリデーションの注文を変更する
この
は、モデル内のコードのブロックです:def validate
#email validation
if !email.blank?
#errors.add(:email,I18n.t(:ismissing))
#else
if email != email_confirmation
errors.add(:email,I18n.t(:ErrorMessageConfirmEmailNotmatch))
else
if email.length <=200 then
if email.match(/^[^@][\w.-]*@[\w.-]+[.][a-z]{2,4}$/i).nil?
errors.add(:email,I18n.t(:ErrorMessageInvalid))
else
if @new_record==true
if User.find(:all, :conditions => ['lower(email) = ?', email.downcase]).count>0
#errors.add(:email," ID already exists. Provide another Email ID")
errors.add(:email,I18n.t(:ErrorMessageAlreadyExists))
end
else
if @changed_attributes["email"]!=nil
if User.User.find(:all, :conditions => ['lower(email) = ?', email.downcase]).count>0
#errors.add(:email," ID already exists. Provide another Email ID")
errors.add(:email,I18n.t(:ErrorMessageAlreadyExists))
end
end
end
end
else
errors.add(:email, I18n.t(:ErroeMessageMustlessthen,:size=>200))
end
end
else
errors.add(:email,I18n.t(:ismissing))
end
#end : Email validation
if email_confirmation.blank?
errors.add(:email_confirmation,I18n.t(:ismissing))
end
#pasword validation
if @new_record==true
if password.blank?
errors.add(:password,I18n.t(:ismissing))
else
if password_confirmation != password
errors.add(:password,I18n.t(:ErrorMessageConfirmPasswordNotmatch))
end
if !password.nil?
if password.length < 4 || password.length > 50 then
errors.add(:password,I18n.t(:ErroeMessageShouldBetween,:from=>"4",:to=>"50"))
end
errors.add(:password,I18n.t(:ErrorMessageInvalidPassword)) if password.match('^[[email protected]#*-_]*$').nil?
end
end
end
#end password validation
if @new_record==true
if password_confirmation.blank?
errors.add(:password_confirmation,I18n.t(:ismissing))
end
end
if dob.blank?
errors.add(:dob,I18n.t(:ErrorMessageInvalid))
else
begin
#dt = DateTime.strptime(dob, "%m/%d/%Y").to_date
if dob.year <= 1900 then
errors.add(:dob,I18n.t(:ErrorMessageInvalidYear))
end
if dob>=Date.today then
errors.add(:dob,I18n.t(:ErroeMessageInvalidBirthday))
end
rescue Exception => ex
#errors.add(:dob,'is Invalid (MM/DD/YYYY format)')
errors.add(:dob,I18n.t(:ErroeMessageInvalidBirthday))
end
end
end
と誰もが任意の提案やアイデアを持っている場合、コントローラが必要ですregistration.An緊急援助のValidateメソッドを呼び出します。 ありがとうございます
あなたはデフォルトのレールバリデーションを使用できませんか?なぜ自分のものが必要なのですか?あなたはデフォルトのレールバリデーションを使用していてもカスタムエラーメッセージを送ることができます... – klump
ルビーコアを引用してみましょう: '#テストを確実にする必要があるときは、それでは、あなたが吸うとテストが弱いことを認めています。 ' 'def self.i_suck_and_my_tests_are_order_dependent!' – Reactormonk
@klump:生年月日と電子メールと電話番号のデフォルト検証を使用する方法:正規表現カスタムを提供する必要があります...もしあなたが私はそれらを使用する方法を説明してくださいできません? – nidhi