В настоящее время я использую наследование одной таблицы в следующей модели для ролей:
# 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
Но у меня все еще возникает ощущение, что я делаю что-то нехорошее, заново изобретаю колесо, или и то и другое.
Итак, как мне (и я должен?) Проверять наличие включения в подклассы при обновлении?