我正在努力实现:
class Model
table = "NOT SET"
self.get(id)
sql = "SELECT * FROM #{table} WHERE id = #{id}
end
end
这是带有示例函数的通用模型类。
class User < Model
table = "users"
end
我希望将通用sql函数保留在父类中,因为并不是每个实例都需要它们。每个类声明都需要在运行get
函数时使用该表。
关于实例变量,您不会实例化一个类来调用get
。类变量由层次结构中的类共享,因此也将不起作用。
我应该如何使用类变量?我怎样才能做到这一点?在Java中,我将有一个受保护的变量,每个类都在构造函数上方分配该变量。
答案 0 :(得分:1)
您可以执行以下操作。在Model类上引发硬错误将是确保在子类上实现table
的另一项好处。
此外,通过使用class << self
语法,您可以定义私有或受保护的类方法。
class Model
class << self
def get(id)
"SELECT * FROM #{table} WHERE id = #{id}"
end
private
def table
raise NotImplementedError
end
end
end
class User < Model
class << self
private
def table
"users"
end
end
end