生成属性方法 - 任何不良副作用?

时间:2012-09-12 08:35:48

标签: ruby-on-rails-3 activerecord

在rails中,如果我想覆盖属性方法,例如。一个setter或getter等,我可能需要定义实例方法。

但是,在首次同步实例之前,activerecord不会定义属性方法。

这可以在:

中看到
class MyModel < ActiveRecord::Base
end

MyModel.attribute_methods_generated? # => false
MyModel.instance_method(:a_db_column)
  # => NameError Exception: undefined method `a_db_column' for class `MyModel'
MyModel.new # implicitly calls define_attribute_methods
# MyModel.define_attribute_methods # can also use this instead of MyModel.new
MyModel.attribute_methods_generated? # => true
MyModel.instance_method(:a_db_column)
#<UnboundMethod: MyModel(#<Module:0x000000030a20a0>)#__temp__>

在提前调用define_attribute_methods时可能会出现任何问题吗?甚至做类似的事情:

class MyModel < ActiveRecord::Base
  define_attribute_methods 
  # is there any code here which might cause problems?
end

2 个答案:

答案 0 :(得分:0)

为什么需要定义实例方法?根据我的理解,您正在尝试添加/覆盖实例方法,因此当您调用此方法时,自创建实例后将调用define_attribute_methods

告诉我,如果我弄错了。

答案 1 :(得分:0)

根据您提供的信息,您似乎想修补ActiveRecord在模型上生成的方法。而不是触发ActiveRecord的方法生成,为什么不修补define_attribute_methods以在完成后调用补丁方法?