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

私がやろうとしているのは、ユーザーの保存を許可する前に、DB にベータ招待の存在を確認することです。

ユーザーは BetaInvite 名をフィールドに渡すため、DB 内の既存のコードと一致するかどうかを確認したいと思います。

あまり混同していないことを願っています。

この問題について何か助けていただければ幸いです。

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 Active Record Validation

于 2012-04-05T01:40:56.317 に答える