Nel mio database sono presenti nomi di colonne come "cancella" o "ascolta controllo" e così via. Questi non possono essere modificati, quindi mi piacerebbe fare l'alias dei nomi in modo da evitare problemi nella mia applicazione.Alias per nomi di colonne in Rails
ho trovato the following code ma non è aggiornato (05 ago 2005) e non funziona 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
Come posso alias i nomi delle colonne? È possibile?
Non vedo quale sia il problema con l'uso di 'delete' e 'listen-control' come nomi di colonne? Ti imbatti in un errore o qualcos'altro? – Ariejan
listen-control causa problemi perché ha un trattino nel nome, che lo rende un attributo di oggetto ruby non valido. Ruby interpreterà "object.listen-control" come "object.listen, meno controllo". E l'eliminazione potrebbe essere una parola chiave riservata. Non so perché vorresti farlo. A volte la risposta giusta è smettere di cercare di combattere rubino o rotaie. –
'define_method (" listen-control ", Proc.new {puts" bingo "})' then 'send (" listen-control ")'. Dov'è il problema? – rthbound