我创建了一个模型类,我在其中定义基于在用户中调用的方法(属性)(继承自模型)的方法。问题是我无法覆盖define_method定义的方法,调用super传递给定义的方法。我猜这是因为定义的方法是添加到用户本身,而不是模型,所以它实际上在超类(即模型)中没有方法。
我想这样做的原因是因为大多数属性应该直接保存到数据库中,而一些属性,如密码,需要一些额外的处理。
class Model
def self.attribute(name)
define_method(name) do
self
end
end
end
class User < Model
attribute :password
end
class User2 < Model
attribute :password
def password
super
end
end
@user = User.new
puts @user.password # => <User:0x00000100845540>
@user2 = User2.new
puts @user2.password
# define_super.rb:17:in `password': super: no superclass method
# `password' for #<User2:0x00000100845578> (NoMethodError)
# from define_super.rb:25:in `<main>'
有什么办法可以更改代码以使其正常工作吗?我需要一种方法来覆盖动态创建的方法。