Kim*_*oar 4 ruby metaprogramming super superclass
我创建了一个Model类,我根据在User中调用的方法(属性)定义方法(继承自Model).问题是我无法覆盖define_method定义的方法,并调用super来传递给定义的方法.我想这是因为定义的方法被添加到User本身,而不是模型,所以它实际上没有超类中的方法(即模型).
我想这样做的原因是因为大多数属性应该直接保存到数据库中,而某些属性(如密码)需要一些额外的处理.
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>'
Run Code Online (Sandbox Code Playgroud)
有什么办法可以改变代码来实现这个目的吗?我需要一种方法来覆盖动态创建的方法.
mty*_*aka 10
在以下方面定义方法superclass:
class Model
def self.attribute(name)
superclass.send :define_method, name do
self
end
end
end
Run Code Online (Sandbox Code Playgroud)