Posso implementar trilhos setter e getter para os atributos para colunas db
-
19-09-2019 - |
Pergunta
No Rails podemos acessar coluna db através de atributos trilhos fornecidos, mas podemos mudar isso? por exemplo, eu tenho db com a coluna nome eu poderia implementar algo semelhante.
def name
"sir" + name
end
Eu tentei, mas resultar em estouro de pilha. Existe uma maneira de conseguir isso.
mais uma pergunta, Existe alguma diferença entre o nome e self.name.
Solução
def name
"sir" + read_attribute(:name)
end
Mas evite esta prática. Use um getter / setter adicional em vez, também conhecido como "atributo virtual". Para mais informações leia esta resposta: decorar um atributo em trilhos
No seu caso, há também um efeito colateral estranho. Cada vez que o atributo é acessado, ele acrescenta o nome. Após 3 chamadas, você acaba com
"sir sir sir name"
Na verdade, você pode fazer
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
Mas, sério, não faça isso.
Outras dicas
Se você está ciente das possíveis complicações, mas ainda precisa fazer isso, então:
def name
"sir" + self[:name]
end
Use super
Ele tem muito o que explicar, mas eu acho que é tão simples como chamar o método que já está definido
def name
"sir #{super}"
end