En mi base de datos tiene nombres de columna como 'eliminar' o 'escuchar-control', etc. No se pueden cambiar, por lo que me gustaría alias los nombres para evitar problemas en mi aplicación.Alias para nombres de columna en Rails
He encontrado the following code pero no está actualizado (05 ago 2005) y no funciona con Rails 3:
module Legacy
def self.append_features(base)
super
base.extend(ClassMethods)
end
module ClassMethods
def alias_column(options)
options.each do |new_name, old_name|
self.send(:define_method, new_name) { self.send(old_name) }
self.send(:define_method, "#{new_name}=") { |value| self.send("#{old_name}=", value) }
end
end
end
end
ActiveRecord::Base.class_eval do
include Legacy
end
¿Cómo puedo asignar un alias a los nombres de las columnas? ¿Es posible?
No veo cuál es el problema con el uso de 'eliminar' y 'escuchar-control' como nombres de columna? ¿Te encuentras con un error u otra cosa? – Ariejan
listen-control causa problemas porque tiene un guion en el nombre, lo que lo convierte en un atributo de objeto ruby no válido. Ruby interpretará "object.listen-control" como "object.listen, menos control". Y eliminar podría ser una palabra clave reservada. No sé por qué querrías hacer esto. A veces, la respuesta correcta es dejar de tratar de luchar contra el rubí o los rieles. –
'define_method (" listen-control ", Proc.new {puts" bingo "})' then 'send (" listen-control ")'. ¿Dónde está el problema? – rthbound