Проверка существования бета-кода перед созданием пользователя

Модель: пользователь

has_one :beta_invite

before_save :beta_code_must_exist

def beta_code_must_exist
    if beta_invite_id == beta_invite.find_by_name(beta_invite.id)
      user
    else
      nil
    end
end

модель: BetaInvite

has_many :users

Я пытаюсь проверить наличие бета-приглашения в БД, прежде чем разрешить сохранение пользователя.

Поскольку пользователь будет передавать имя BetaInvite в поле, я хотел бы проверить, соответствует ли оно каким-либо существующим кодам в БД.

Надеюсь, я не слишком все перепутал.

Был бы признателен за любую помощь с этой проблемой.

2 ответа

Решение
  1. Добавьте текстовое поле в форму для: beta_code

  2. Добавьте attr_accessor для этого поля: attr_accessor: beta_code

  3. Затем добавьте следующую строку в модель (Предполагается, что вы хотите выполнить эту проверку только при создании пользователя):

    validate :beta_code_must_exist, :on => :create

  4. + Изменить beta_code_must_exist добавить ошибку в форму. Также не забудьте правильно привести: beta_code в правильный тип.

    Предупреждение непроверенного кода ниже

    def beta_code_must_exist
      @invite = BetaInvite.find_by_name(beta_code)
      if @invite.empty?
        errors.add(:beta_code, "is not a valid invite code")
      else
        beta_invite_id = @invite.id
      end
    end
    

Использование :inclusion с :in вариант. Вы можете поставить :in с любым перечисляемым:

validates :beta_invite, :inclusion => { :in => BetaInvite.all,
:message => "%{value} is not a valid beta invite code" }

Источник: Rails Active Record Validation

Другие вопросы по тегам