ruby on rails - ¿Es alias_method_chain sinónimo de alias_method?
ruby-on-rails (2)
Si estos dos métodos son simplemente sinónimos, ¿por qué la gente se _chain
la molestia de escribir los caracteres adicionales " _chain
"?
No. alias_method
es un método estándar de Ruby. alias_method_chain
es un complemento de Rails diseñado para simplificar la acción común de alias_method_chain
un alias del método antiguo con un nuevo nombre y luego un nuevo método al nombre original. Entonces, si, por ejemplo, está creando una nueva versión del method
método con la nueva característica new_feature
, los siguientes dos ejemplos de código son equivalentes:
alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature
y
alias_method_chain :method, :new_feature
EDITAR
Este es un ejemplo hipotético: supongamos que tenemos una clase de persona con un método para rename
. Todo lo que hace es tomar una cadena como "John Doe", dividir en el espacio y asignar partes a first_name y last_name. Por ejemplo:
person.rename("Steve Jones")
person.first_name #=> Steve
person.last_name #=> Jones
Ahora estamos teniendo un problema. Seguimos recibiendo nuevos nombres que no están en mayúsculas correctamente. Entonces podemos escribir un nuevo método rename_with_capitalization
y usar alias_method_chain
para resolver esto:
class Person
def rename_with_capitalization(name)
rename_without_capitalization(name)
self.first_name[0,1] = self.first_name[0,1].upcase
self.last_name[0,1] = self.last_name[0,1].upcase
end
alias_method_chain :rename, :capitalization
end
Ahora, el antiguo rename
se llama rename_without_capitalization
, y rename_with_capitalization
es rename
. Por ejemplo:
person.rename("bob smith")
person.first_name #=> Bob
person.last_name #=> Smith
person.rename_without_capitalization("tom johnson")
person.first_name #=> tom
person.last_name #=> johnson
alias_method_chain
es la peor forma de interceptar llamadas de método. Si está buscando técnicas similares, no las utilice fuera de los rieles.