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.

Foi útil?

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

Rubi Substituindo

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top