Após gerar um scaffold, como posso remover o hash de uma página 'SHOW' por exemplo gerada por um Scaffold e exibir realmente o conteúdo e não sua referência?
Após gerar um scaffold, como posso remover o hash de uma página 'SHOW' por exemplo gerada por um Scaffold e exibir realmente o conteúdo e não sua referência?
Oi Guilherme, tudo bem? Não entendi bem sua pergunta, pode explicar melhor? hash de uma página show?
Quando criamos uma página com scaffold, ela gera uma gágina chamada show nas views. Só que exibe um hash e não o valor do campo mesmo.
Por exemplo tenho uma classe chamada Pessoa que se relaciona com endereço. Eu consigo realizar o cadastro do pessoa dando um build em endereço.
Apos cadastrar ele mostra o endereço assim
#<Endereco:0x91c3bf0>
Oi Guilherme, isso acontece por que neste caso o Endereço é um outro objeto né isso? Bom, você não pode imprimir um objeto diretamente assim, só seus atributos. O que você pode fazer é: implementar o to string do objeto. Algo assim:
def to_s
"String do Endereço real"
end
Pegou a ideia?
Exatamente. Tenho um obj Pessoa e tenho outro Endereco, mas não peguei a ideia...
Uma função que retorna apenas a string baseado no @pessoa = Pessoa.find(params[:id])?
Mas em Endereco tenho rua, bairro, município e estado, como faria isso?
Guilherme, você pode acessar o atributo direto. Algo como:
endereco.rua
endereco.bairro
Entendeu? Ou fazer como eu sugeri no post anterior. Na classe Endereco, você poderia criar o método to_s
.
def to_s
"#{rua}, #{bairro}"
end
Muito Obrigado Macêdo. Utilizei acessando o atributo direto.
Nesse segundo exemplo, vc criou uma função. Ela seria criada na controle e como a chamaria na view num collection_select por exemplo?
Ela seria criada na classe Endereco e você não precisaria chamar ela diretamente. Quando você imprime o objeto direto sem chamar nenhum método, esse método to_s
é chamado automaticamente. Algo tipo:
puts Endereco