Я не использовал acts_as_audited
, но я предполагаю, что его реализация переопределяет метод доступа для этого столбца. В этом случае вы должны просто сделать что-то вроде этого:
class ActiveRecord::Base
def self.name_column(column_name, new_name)
define_method(new_name) {read_attribute column_name}
define_method("#{new_name}=") {|value| write_attribute column_name, value}
define_method("#{new_name}?") {attribute_present? column_name}
end
end
Они будут напрямую обращаться к столбцу, указанному в column_name
, не проходя через переопределенный метод доступа.
О, ответ метапрограммирования, уничтожающий дублирование:
class ActiveRecord::Base
def self.name_column(column_name, new_name)
{ '' => :read_attribute,
'=' => :write_attribute,
'?' => :attribute_present? }.each do |suffix,method|
define_method("#{new_name}#{suffix}") {|*args| send method, column_name, *args}
end
end
end
Просто потому, что мне нравится показывать, как это можно сделать.