1

型号:用户

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 名称传递到该字段中,我想检查它是否与数据库中的任何现有代码匹配。

希望我没有把事情搞混太多。

感谢您对这个问题的任何帮助。

4

2 回答 2

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
    
于 2012-04-05T01:09:47.480 回答
0

:inclusion:in选项一起使用。您可以提供:in任何可枚举的:

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

资料来源:Rails 活动记录验证

于 2012-04-05T01:40:56.317 回答