0

Я создаю приложение с несколькими арендаторами в Rails 4 с использованием Gem Apartment, это приложение на основе подписки и ограничивает количество пользователей по типу плана.Не знаете, как подойти с помощью Планирующего валидатора на пользователе, чтобы проверить, находится ли план на максимально допустимых пользователях Rails 4 Devise Invitable

У меня есть следующая валидация в моей модели плана (здесь я вложу все это), но я не уверен, как проверить это, чтобы администратор или владелец не могли пригласить пользователя, если учетная запись находится в макс. вместимость?

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 позволяет. если так, я хочу выслать сообщение с сообщением, пожалуйста, обновите ..

спасибо заранее .. Это проклятие моего существования !!

+0

'account.present? && сохраняется? && account.users.count Sravan

+0

Вы должны проверить пользователей этой учетной записи, а не всех пользователей. – Sravan

+0

В квартире у этого есть свой собственный shchema, поэтому, даже если бы я попытался найти все приложения для пользователей, я наклоняю –

ответ

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