在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