0

我使用 Apartment Gem 在 Rails 4 中构建了一个多租户应用程序,这是一个基于订阅的应用程序,并通过计划类型限制用户数量。

我的计划模型中有以下验证(我将在此处粘贴整个内容),但我不确定如何验证此验证,以便管理员或所有者在帐户处于最大容量时无法邀请用户?

计划.rb:

class Plan < ApplicationRecord
  # Enum & Constants
  enum plan_type: [:responder, :first_responder, :patrol_pro, :guardian]

  USER_LIMITS = ActiveSupport::HashWithIndifferentAccess.new(
    #Plan Name      #Auth Users
    responder:        6,
    first_responder:  12,
    patrol_pro:       30,
    guardian:         60
  )

  # Before Actions

  # Relationships
  belongs_to :account, optional: true

  # Validations
  validate :must_be_below_user_limit

  # Custom Methods
  def user_limit
    USER_LIMITS[self.plan_type]
  end

  def must_be_below_user_limit
    if account.present? && persisted? && User.count < user_limit
     errors[:user_limit] = "can not more than #{user_limit} users"
   end
  end

end

功能方面我想确保如果关联帐户的用户数量超过 plan_type 允许的数量,则所有者无法添加用户。如果是这样,我想闪烁一条消息说请升级..

提前谢谢..这是我存在的祸根!!

4

1 回答 1

1

您为 设置了错误的条件user_limit并删除了持久的?它不像你所需要的那样,account.present?

class Plan < ApplicationRecord
  # Enum & Constants
  enum plan_type: [:responder, :first_responder, :patrol_pro, :guardian]

  -----------------------

  # Custom Methods
  def user_limit
    USER_LIMITS[self.plan_type]
  end

  def must_be_below_user_limit 
    if account.present? && (account.users.count > user_limit)
     errors.add(:user_limit, "can not more than #{user_limit} users") 
    end
  end 

end
于 2016-10-19T07:04:10.107 回答