2009-08-07 17 views
3

私は作成しようとしているフォームがセクションに分割されています。各セクションはそのテーブルに情報を少し保存し、次のページに移動します。私は、モデルの各セクションのデータを検証する最善の方法を理解しようとしています。私はvalidates_presence_ofのようなものを使用していましたが、検証されているすべてのデータが保存時に利用可能になると期待しています...私の場合、テーブル全体は各セクションを通過するまで記入されません。Rails部分テーブルのバリデーション

方法がある場合、これを行うにはどのような方法が最適ですか?

答えて

7

:ifまたは:unlessオプションを使用して条件付きで検証を行うことができます。テーブルに「ステップ」列を追加すると、これを使ってモデルを途中で検証することができます。

class Item < ActiveRecord::Base 
    validates_presence_of :name # step 1 
    validates_presence_of :category_id, :if => Proc.new { |i| i.step >= 2 } # step 2 
    validates_presence_of :description, :if => Proc.new { |i| i.step >= 3 } # step 3 
end 

あなたは、ステップは、あなたのコントローラ内の各時間をカウントインクリメントすることができます。

def update 
    @item = Item.find(params[:id]) 
    @item.step += 1 
    if @item.update_attributes(params[:item]) 
    # ... 
    end 
end 

state machineを使用することをおすすめします。

2

一度に限定されたモデル属性のグループの検証を容易にする非常に良いgrouped_validations gemがあります。上記のように状態を追跡する必要はありません。

overview docs on githubを参照してください。

関連する問題