私はacts_as_audited
を使用していませんが、その実装がその列のアクセサーをオーバーライドしていると仮定しています。これらは直接オーバーライドされたアクセサを経由せずcolumn_name
で指定したカラムにアクセスする
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
:その場合は、あなただけのこのような何かを行うことができるはず。
ああ、ボーナス重複破壊メタプログラミングの答え:私はそれを行うことができますどのように表示したいという理由だけで
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
。
私はこれを打ち明け、あなたに知らせるでしょう。ニースのメタ – catalpa
これは私にエラーをもたらします: NoMethodError:未定義メソッド 'define_method' – catalpa
define_methodはプライベートなので、メソッドを追加するクラスのコンテキスト内にある必要があります。 read_attribute、:DEF \t name_column '改訂'、 'legacy_revision' 端をafter_initialize DEF name_column(COLUMN_NAME、NEW_NAME) { '' =>(Iは、領域の一部がもう少し再利用可能にするために離れて、それを壊しました) '=' =>:write_attribute、 '?' =>:attribute_present? } .each do |接尾辞、メソッド| add_method(Document、 "#{new_name}#{suffix}"){| * args |私は改行は表示されません推測デフadd_method(C、M、&b)の \t c.class_eval {define_method(M&B)} 終了 – catalpa