Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
Ambos atualizarão um objeto sem precisar informar explicitamente o AR para atualizar.
A API do Rails diz:
para update_attribute
Atualiza um único atributo e salva o registro sem passar pelo procedimento de validação normal. Isso é especialmente útil para sinalizadores booleanos em registros existentes. O método update_attribute regular no Base é substituído por esse quando o módulo de validações é misturado, o que é por padrão.
para update_attributes
Atualiza todos os atributos do Hash passado e salva o registro. Se o objeto for inválido, o salvamento falhará e falso será retornado.
Portanto, se não quiser validar o objeto, devo usar o update_attribute. E se eu tiver essa atualização em um before_save, ele fará o stackoverflow?
Minha pergunta é: update_attribute também ignora o antes de salvar ou apenas a validação.
Além disso, qual é a sintaxe correta para passar um hash para update_attributes ... confira meu exemplo na parte superior.
before_save
retorno de chamada). Fe em vez de update_attribute(:discount, 0.1) if amount > 100
você poderia fazer discount = 0.1 if amount > 100
. update_attribute
chama save
o objeto, o que é desnecessário nesse caso, pois a instrução está dentro de um before_save
retorno de chamada e será salva de qualquer maneira. Espero que faça sentido.
update_attribute
declaração dentro de umbefore_save
retorno de chamada? Não consigo pensar em uma boa razão para isso.