我已经创建了一个实例方法,它也是一个回调(如果这是有意义的),它做了一些不相关的东西。我很乐意能够致电:
class Model < ActiveRecord::Base
fix_camelcase_columns
end
现在我有了这个:
def after_find
self.class.columns.each do |column|
self.instance_eval("def #{column.name.to_underscore}; self.#{column.name}; end;")
end
end
我很想抽象出来并将其用于其他课程。有什么指针吗?
答案 0 :(得分:2)
好吧,你可以打开ActiveRecord::Base
并在那里抛出一个方法:
class ActiveRecord::Base
def self.fix_camelcase_columns
define_method :after_find do
...
end
end
end
为了更清洁,请创建一个模块:
module CamelcaseFixer
def self.included(base)
base.extend(self)
end
def fix_camelcase_columns
define_method :after_find do
...
end
end
end
然后在你的模型中做
class Model < ActiveRecord::Base
include CamelcaseFixer
fix_camelcase_columns
end
没有测试代码,看它是否有效。