Как я должен иметь унаследованные переменные в Ruby? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь достичь:

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.

Что касается переменных экземпляра, вы не должны [sic] создавать экземпляр класса для вызова get. Переменная класса является общей для классов в иерархии, поэтому она также не будет работать.

Как мне использовать переменные класса? Как я могу это сделать? В Java у меня была бы защищенная переменная, которую каждый класс назначает над конструктором.

1 Ответ

1 голос
/ 24 марта 2019

Вы могли бы сделать что-то вроде этого.Выявление серьезной ошибки в классе 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...