2012-04-05 62 views
1

型号:用户创建用户之前验证的测试代码存在

型号:BetaInvite

has_many :users 

什么我真的想要做的是检查是否存在在允许用户保存之前,在数据库中发布测试版邀请。

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

希望我没有太多混淆。

希望对此问题有任何帮助。

+0

你在做用户创建或在任何时候用户记录这种检查被保存? – 2012-04-05 01:26:19

回答

1
  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 
    
+0

感谢您的答案,但我不知道我是如何检查user.beta_invite_id(来自用户窗体)是否匹配beta_invite.name(BetaInvite) – 2012-04-05 01:27:35

+0

BetaInvite是否同时拥有一个名称和一个ID? – 2012-04-05 01:29:56

+0

等待您的用户记录是否存在于进行验证时?我在这个答案中的假设是,这是一个用户注册页面,用户记录甚至不存在,因此没有以前的beta_invite关联。 – 2012-04-05 01:36:58

0

使用:inclusion:in选项。你可以用任何枚举提供:in

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

来源:Rails Active Record Validation

相关问题