Rails部分表验证

int*_*rgc 3 validation ruby-on-rails

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

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

rya*_*anb 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以在控制器中每次增加步数.

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

您可能还想考虑使用状态机.