Я пытаюсь решить, подписан ли пользователь на соответствующий план для моего приложения SaaS.
Вот в основном то, что я пытаюсь сделать:
module SubscriptionControlled extend ActiveSupport::Concern
class_methods do
def requires_subscription_to(perm)
@@perms = [perm]
end
end
included do
validate :check_subscription
end
def check_subscription
@@perms.each do |perm|
self.errors.add(:base, "Subscription upgrade required for access to this feature") unless self.user[perm]
end
end
end
Это обеспечивает API для модели:
class SomeModel < ApplicationModel
include SubscriptionControlled
requires_subscription_to :pro
end
Проблема, с которой я сталкиваюсь, заключается в том, что @@perms
, кажется, ограничен КОНЦЕРНОМ, а не МОДЕЛЬЮ.Так что это значение одинаково для всех моделей.Таким образом, какая бы модель не загружалась последней, это значение устанавливается для всех моделей.
Например: если загружено в следующем порядке:
Model1 -> sets @@perms to [:pro]
Model2 -> sets @@perms to [:business]
Для модели 1 и модели 2 требуется только подписка на: business
Есть ли способ хранения переменных уровня класса в рамках задачи, которые вступают в силу для каждой модели для реализации этого API?