En una aplicación RoR, quiero especializar el método update_attributes() de ActiveRecord en uno de mis modelos, extraer algunos de los atributos para un manejo especial y pasar el resto al método original update_attributes(). Los detalles:Ruby/RoR: llamando al método original a través de super()?
class Premise < ActiveRecord::Base
...
def update_attributes(attrs)
attrs.each_pair do |key, val|
unless has_attribute?(key)
do_special_processing(key, val)
attrs.delete(key)
end
end
# use original update_attributes() to process non-special pairs
super.update_attributes(attrs)
end
...
end
La llamada a super.update_attributes (ATTR) genera un error:
undefined method `update_attributes' for true:TrueClass
... lo que me hace sospechar que realmente no entiendo la palabra clave super en Ruby. ¿Qué me estoy perdiendo? Específicamente, ¿cómo llamo al método original update_attributes()?
En este caso, los argumentos sobre 'update_attributes (attrs)' y 'super (attrs)' son los mismos. Simplemente puede llamar a 'super', sin paréntesis. –
@LBg Ah, gracias, buen punto. También corregí un poco al final de mi respuesta sobre eso; Originalmente escribí que el código en la pregunta se llamaba update_attributes sin argumentos, pero eso no es correcto. – DSimon
Bingo - gracias. Mi pasado como programador de Java se muestra a través de ... –