Rails - Valide a exclusividade de atributos aninhados com o escopo pai do pai
Eu tenho um problema com a validação de exclusividade no escopo no Rails para atributos aninhados com um pai ou mãe.
fundo
Eu tenho uma aplicação de trilhos 4 com 3 modelos:
#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
Questão
Eu quero fazer um escopo,para garantir que o atributo : email do modelo EmailAddressé único no nível da conta (A conta é pai de Contato, que é pai de EmailAddress).
Conforme sugerido emhttp://guides.rubyonrails.org/active_record_validations.html, Eu tentei :
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
Isso gera o erro "a coluna email_addresses.account não existe" O que devo fazer?
Obrigado pela ajuda!