He estado impidiendo cambios a ciertos modelos mediante el uso de esta en el modelo:¿Cómo puedo denegar actualizaciones excepto en un campo?
def update
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
Ahora estoy escribiendo un plugin que ofrece algunas funciones extra para el modelo, y necesito actualizar un campo en el modelo. Si yo no estuviera usando un plugin Me gustaría hacer esto directamente en el modelo ...
def update
if self.changed == ['my_field']
super
else
self.errors.add_to_base("Cannot update a #{ self.to_s }")
end
end
no puedo hacer lo mismo de mi plug-in, ya que no sé si el comportamiento de actualización es el valor predeterminado ActiveRecord o ha sido anulado para evitar actualizaciones. ¿Hay alguna otra manera de evitar las actualizaciones de registros al mismo tiempo que me permite anular para un campo específico (y solo en la instancia en que se aplica mi complemento a este modelo).
Gracias. Me di cuenta de que los modelos que requieren mi lógica prevent_update también son los que requieren el complemento, así que he movido todo al plugin, usando un filtro before_update como sugieres. – Nick
En rieles 3. *, agregue el error mediante 'self.errors.add: base," No se puede actualizar ... "' – ronen
Creo que probablemente desee que la cláusula if sea más bien 'return true si self.changed | self. updatabale_attributes == self.updatabale_attributes' para que también pueda actualizar un subconjunto de los atributos actualizables. – Timo