2011-09-25 5 views
5

特定のフォーム(コントローラのアクション)でのみバリデーションをトリガする方法はありますか? User.create(:validate=>true)フラグのようなものです。特定の形式のバリデーション

+0

なぜこれをやろうとしていますか?私たちがあなたの質問の背後にある理由を知っているなら、私たちはより良い答えを与えることができます。 – rdvdijk

+0

私はちょうど少数のフィールドを提供する必要があり、残りはユーザーアクションの編集から記入する必要があるときに登録すると、プロファイルから分離されていない、ユーザーモデルを乱してしまいました。 – methyl

+0

Btwそのようなすべてのバリデーションを渡すことができます:Model.save(false) – emrahbasman

答えて

8

はい、あなたは例えば、検証に条件文を供給することができます:

validates_presence_of :something, :if => :special? 

private 

def make_sepcial 
    @special = true 
end 

def special? 
    @special 
end 

を使用すると、これらの検証をオンにしなければならないすべては、次のとおりです。

s = SomeModel.new 
s.make_special 
+0

だから、私はモデルを保存した後に特別にfalseに設定しなければなりませんか? – methyl

+0

Nope。 '@ special'は単なるインスタンス変数です。それ以上の作業がなければ、それを死に至らせることができます。それ以上のデータベースクエリには永続化されません。 – thomasfedb

4

あなたはコメントで説明したように、新しいレコードの検証をスキップします。その場合、あなたはthomasfedbの答えを使用できますが、@special変数を使用しませんが、:

validates_presence_of :something, :if => :persisted? 

これは、保存されたUserのためではなく、新しいUser秒間だけ検証します。 persisted?のAPIドキュメントを参照してください。

+0

次のようにも使用できます:unless =>:persisted?新しい場合は逆バリデーションをしたいが、保存しない場合は逆の検証をしたい。 –

+0

これは正解です – doz87

関連する問題