我在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