我有一個驗證EmailContact
,就像這樣:Ruby on Rails驗證 - 如果模型無效,那麼?
class EmailContact < ActiveRecord::Base
validates :email, :presence => true, :email => {:message => I18n.t('validations.errors.models.user.invalid_email')},
:mx => {:message => I18n.t('validations.errors.models.user.invalid_mx')}
end
在這裏,我驗證EmailContact.email
。
然後,我有一個PhoneContact
沒有驗證:
class PhoneContact < ActiveRecord::Base
end
我想寫的東西是這樣的:
email_contact = EmailContact.create(params)
if email_contact.invalid?
phone_contact = PhoneContact.create(params)
end
基本上,如果email_contact
不能創建由於驗證錯誤,我應該創建一個phone_contact
。這怎麼可能?
這是我已經試過:
contact = EmailContact.create(:email => 'a')
(0.3ms) BEGIN
(0.4ms) ROLLBACK
ArgumentError: cannot interpret as DNS name: nil
contact.invalid?
NoMethodError: undefined method `invalid?' for nil:NilClass
contact
剛剛返回nil在這種情況下...
編輯
這可能是這個問題需要去不同的方向。僅供參考:
email_contact = EmailContact.new(:email => 'a')
email_contact.valid?
ArgumentError: cannot interpret as DNS name: nil
email_contact.valid?
返回一個錯誤,而不是返回爲我所期望的假。我正在使用valid_email
寶石來對模型進行驗證。
聽起來像mx驗證是導致此問題的原因之一,因爲它無法從您傳遞它的無效電子郵件地址獲取主機或IP地址。 – Hesham
正確。我認爲問題在於如何進行驗證。我正在使用gem'valid_email'。即使執行email_contact = EmailContact.new(:email =>'a')'並運行'email_contact.valid?'也會引發同樣的錯誤。它不返回true或false,它拋出'不能解釋爲DNS名稱:nil'錯誤。 – Luigi
你想做mx驗證嗎?這聽起來對我來說太過分了。如果你刪除該部分,它會正常工作。 – Hesham