0

Apartment Gem を使用して Rails 4 でマルチテナント アプリを構築しています。これはサブスクリプション ベースのアプリケーションであり、プラン タイプによってユーザー数が制限されています。

プラン モデルに次の検証があります (ここにすべてを貼り付けます) が、これを検証して、アカウントが最大容量に達している場合に管理者または所有者がユーザーを招待できないようにする方法がわかりません。

Plan.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 に答える