在创建用户之前验证测试版代码的存在



型号:用户

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

我想做的是在允许保存用户之前,检查DB中是否存在测试版邀请。

由于用户将把BetaInvite名称传递到字段中,我想检查它是否与数据库中的任何现有代码匹配。

希望我没有把事情搞得太乱。

如果您能帮我解决这个问题,我将不胜感激。

  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活动记录验证

最新更新