我創建了一個Model類,其中我基於User(從Model繼承)中調用的方法(屬性)定義方法。問題是我無法重寫由define_method定義的方法,並調用super傳遞給定義的方法。我想這是因爲定義的方法被添加到用戶本身,而不是添加到模型,所以它在超類(即模型)中實際上沒有方法。調用super由define_method定義的方法
我想這樣做的原因是因爲大多數屬性應直接保存到數據庫中,而某些屬性(如密碼)需要一些額外的處理。
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>'
有沒有什麼辦法可以改變代碼來使它工作?我需要一種方法來覆蓋動態創建的方法。
謝謝。那正是我需要的。 – 2010-01-03 13:53:59
如果這就是你需要的,你應該選擇答案。晚得多(7年以上)比從未。 :-) – 2017-03-22 19:16:23