我应该如何在Ruby中继承变量?

时间:2019-03-24 12:14:48

标签: ruby oop

我正在努力实现:

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中,我将有一个受保护的变量,每个类都在构造函数上方分配该变量。

1 个答案:

答案 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
相关问题