Как использовать ActiveRecord STI, как (и я должен?) Проверять наличие в подклассах? - PullRequest
0 голосов
/ 27 июня 2018

В настоящее время я использую наследование одной таблицы в следующей модели для ролей:

# app/models/role.rb
class Role < ApplicationRecord
  # ...
end

class Observer < Role; end
class Manager < Role; end
class Owner < Role; end

Я попытался добавить константу для проверки на включение в начало класса:

class Role < ApplicationRecord
  ROLE = subclasses.map(&:name)

  # and

  validates :type, inclusion: { in: ROLE }

  # ...
end

Но я получаю ROLE # => [], так как подклассы загружаются после его сборки.

Я сейчас заставил его работать, используя пользовательский метод проверки с AR:

class Role < ApplicationRecord
  validate :subclass_check

  # ...

  private

  def subclass_check
    return true if Role.subclasses.map(&:name).include?(type)
    errors.add(:type, "#{type} is not a type of Role")
  end
end

Но у меня все еще возникает ощущение, что я делаю что-то нехорошее, заново изобретаю колесо, или и то и другое.

Итак, как мне (и я должен?) Проверять наличие включения в подклассы при обновлении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...