2011-06-30 45 views
11

私は通常のフィールド(名前、電子メール、パスワードなど)と "team_invite_code"フィールドと "role"ポップアップメニューを持つユーザーサインアップフォームを持っています。ユーザーを作成する前にRailsのカスタム検証

- のみの場合には、ユーザーの役割が「子」である - 私はする必要があるでしょう:チームは、チームのテーブルに存在する場合team_invite_codeはチェック

  • 存在する場合

    • チェックそれは、同じ招待コード
    • は私がRailsの2.3.6に適切な検証を書くことができますどのように

    右チームにユーザーを関連付けましたか?

    私は次のことを試してみましたが、それは私にエラーを与えている:

    validate :child_and_team_code_exists 
    
    def child_and_team_code_exists 
        errors.add(:team_code, t("user_form.team_code_not_present")) unless 
        self.is_child? && Team.scoped_by_code("params[:team_code]").exists? 
    end 
    
    >> NameError: undefined local variable or method `child_and_team_code_exists' for #<Class:0x102ca7fa8> 
    

    UPDATE: この検証コードは動作します:

    def validate 
        errors.add_to_base(t("user_form.team_code_not_present")) if (self.is_child? && !Team.scoped_by_code("params[:team_code]").exists?) 
    end 
    

    答えて

    37

    プライベートまたは保護されなければならないchild_and_team_code_existsあなたのvalidateメソッドメソッドを使用します。そうでない場合はインスタンスメソッドになります

    validate :child_and_team_code_exists 
    
    
    private 
    def child_and_team_code_exists 
        errors.add(:team_code, t("user_form.team_code_not_present")) unless 
        self.is_child? && Team.scoped_by_code("params[:team_code]").exists? 
    end 
    
    +0

    ありがとうFelix、私はメソッド定義の前に "プライベート"を追加しましたが、私は同じエラーが発生しています:( – Augusto

    +0

    あなたのモデルにいくつかのコードを投稿してください。はい、あなたが質問で言及したように、パラメタを使用しないでください。パラメタは自己の属性であれば利用できます。 – felix

    +0

    こんにちはフェリックス私は質問を更新しました、今、検証コードが動作します。それでも、私はparamsを処理する方法がわかりません。なぜなら、team_codeはユーザの属性(最初のものの後に多くのチームを持つことができます)ではない(そうすべきではありません)。 – Augusto