私は使用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
それがどのようにできるかを示したいからです。