2009-07-31 12 views
10

私はActiveRecordオブジェクトのコレクションを持っています。私は実際にそれらをデータベースに保存することなく、これらのオブジェクトのそれぞれについてすべてのバリデーションを実行できるようにしたい。彼らをデータベースに保存することが有効かどうかを知りたいだけです。言い換えれば、私は基本的に私のオブジェクトごとにerrorsのデータ構造体を設定したいと考えています。これを行う方法はありますか?または、おそらく、errorsコレクションのライフサイクルについて何か不足していますか?保存せずにActiveRecord検証を実行する

答えて

23

"無効?"メソッドはあなたのすべてのエラーをActiveRecord :: Errorsオブジェクトに入れて、あなたの検証を実行します。これは上記の例のようにアクセスできます。コンソールで試してみてください。

+0

同様の行に沿って、私はそのレコードに基づいて発行リンクを公開しようとしているかどうかを表示しようとしています。私のバリデーションでは、バリデータを使用しています。属性を変更してtrueと言う簡単な方法はありますか?それが公開に有効かどうかを確認してください。 post = Post.new(:title => "title"、:published => false) post.published = true post.validならば? post.published = false – chetu

2

オブジェクトに対して#valid?メソッドを実行すると、すべての検証が実行され、errors構造体が生成されます。

@user = User.new 
if @user.valid? 
    #do things 

にエラーが何であるかを確認したい場合は、あなたが行うことができます:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

を呼び出すあなたはモデルが有効であるかどうかを確認するには、次の操作を行うことができ

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
関連する問題