Created
August 15, 2008 15:14
-
-
Save neves/5582 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=begin | |
o objetivo abaixo é trazer para o Rails 2.1 o recurso de atribuir um Hash e ele criar a entidade. | |
Ao invés de: pessoa.endereco_residencial = Endereco.new(:cep => 12345678) | |
fazer: pessoa.endereco_residencial = {:cep => 12345678} | |
para facilitar uso de submodel em form: Pessoa has_one EnderecoResidencial | |
mas ao mesmo tempo, tratar as seguintes característica: | |
Se não tiver endereço, cria ao atribuir hash ou objeto. | |
Se já tiver endereço e atribuir um hash vazio ou um endereco vazio, apagar o relacionamento. | |
Se atribuir um hash não vazio e já tiver endereço, faz update, ao invés de destruir e criar dinovo. | |
=end | |
# @TODO: transformar em um plugin | |
# @TODO: verificar o comportamento no Rails Edge, que parece que a cada update, o objeto é destruído e construído um novo. | |
def endereco_residencial_with_hash=(end_or_hash) | |
if end_or_hash.is_a? Endereco | |
self.endereco_residencial_without_hash = end_or_hash.vazio? ? nil : end_or_hash | |
elsif end_or_hash.nil? | |
self.endereco_residencial_without_hash = nil | |
elsif end_or_hash.is_a? Hash | |
#self.endereco_residencial = EnderecoResidencial.new end_or_hash | |
if end_or_hash.values.all?(&:empty?) | |
self.endereco_residencial = nil | |
else | |
if self.endereco_residencial.nil? | |
self.endereco_residencial = EnderecoResidencial.new end_or_hash | |
else | |
self.endereco_residencial.update_attributes(end_or_hash) | |
end | |
end | |
end | |
end | |
alias_method_chain :endereco_residencial=, :hash |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment