Pergunta

Digamos que eu tenho esse modelo chamado produtos com um campo nomeado marca. Suponha que os valores de marca são armazenados no formato this_is_a_brand. Posso definir um método no modelo (ou em qualquer outro lugar) que me permita modificar o valor de marca antes que seja chamado. Por exemplo, se eu ligar @product.brand, Eu quero conseguir Esta é uma marca, ao invés de this_is_a_brand.

Foi útil?

Solução

Eu recomendaria usar a sintaxe do suporte quadrado ([] e []=) ao invés de read_attribute e write_attribute. A sintaxe do suporte quadrado é mais curto e projetado para embrulhar o protegido LEIT/WRITLE_ATTRIBUE Métodos.

def brand
  original = self[:brand]
  transform(original)
end

def brand=(b)
  self[:brand] = reverse_transform(b)
end

Outras dicas

Em vez de acessar @attributes diretamente, você deve usar read_attribute e write_attribute:

def brand
  b = read_attribute(:brand) 
  b && b.transform_in_some_way
end

def brand=(b)
  b && b.transform_in_some_way
  write_attribute(:brand, b)
end

Como a última resposta foi publicada há 7 anos, contribuirei com o que o API do Rails atualmente sugere.

def brand
  super.humanize
end

Humanizar transforma 'this_is_a_brand' para 'esta é uma marca'

No seu modelo, você pode substituir a chamada do método brand.

def brand
#code to modify the value that is stored in brand
return modified_brand
end

Isso permitirá que ele seja armazenado como this_is_a_brand. Mas, será devolvido como "esta é uma marca".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top