我在Rails中使用父項父項的嵌套屬性進行範圍唯一性驗證有問題。Rails-驗證嵌套屬性父項的範圍父項的唯一性
背景
我有一個Rails應用4與3種型號:
#app/models/account.rb
class Account < ActiveRecord::Base
has_many :contacts, dependent: :destroy
end
#app/models/contact.rb
class Contact < ActiveRecord::Base
belongs_to :account
has_many :email_addresses, dependent: :destroy, validate: :true, inverse_of: :contact
accepts_nested_attributes_for :email_addresses,allow_destroy: true
validates :email_addresses, presence: true
end
#app/models/email_address.rb
class EmailAddress < ActiveRecord::Base
belongs_to :contact, inverse_of: :email_addresses
validates :label, presence: true
validates :contact, presence: true
validates :email, uniqueness: true, presence: true
validates_email_format_of :email
end
問題
我希望做一個範圍,以確保屬性 :模型EmailAddress 的電子郵件在帳戶級別是唯一的 (帳戶是聯繫人的父母,它本身是EmailAddress的父親)。
至於建議在http://guides.rubyonrails.org/active_record_validations.html,我想:
class EmailAddress < ActiveRecord::Base
belongs_to :contact, inverse_of: :email_addresses
validates :label, presence: true
validates :contact, presence: true
validates :email, presence: true, uniqueness: { scope: :account,
message: "This contact email is already taken" }
validates_email_format_of :email
end
這就提出了一個錯誤「列email_addresses.account不存在」 我應該怎麼辦?
感謝您的幫助!
可能是這樣work.Add給你的'EmailAddress'模型'驗證:電子郵件,:唯一性=> {:scope =>:contact_id}' – Pavan
實際上,我希望爲該帳戶有一個範圍,而不是爲聯繫人 – Nobigie
您應該添加'belongs_to:account'到'EmailAddress'模型來做到這一點。 – Pavan