2009-08-07 69 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