Проверка существования бета-кода перед созданием пользователя
Модель: пользователь
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 ответа
Добавьте текстовое поле в форму для: beta_code
Добавьте attr_accessor для этого поля: attr_accessor: beta_code
Затем добавьте следующую строку в модель (Предполагается, что вы хотите выполнить эту проверку только при создании пользователя):
validate :beta_code_must_exist, :on => :create
+ Изменить
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