Rails部分表验证

时间:2009-08-07 02:36:46

标签: ruby-on-rails validation

我有一个我正在尝试创建的表单,它分为几个部分。每个部分都会向该表保存一些信息,然后转到下一页。我正在试图找出验证模型中每个部分的数据的最佳方法。我想使用类似validates_presence_of的东西,但是期望所有正在验证的数据在保存时都可用...在我的情况下,整个表格在完成每个部分之前都不会被填写。

如果有办法,最好的方法是什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

有一个非常好的groups_validations gem,有助于一次验证有限的模型属性组。不需要像上面那样进行状态跟踪。

请参阅overview docs on github