int*_*rgc 3 validation ruby-on-rails
我有一个我正在尝试创建的表单,它分为几个部分.每个部分都会向该表保存一些信息,然后转到下一页.我正在试图找出验证模型中每个部分的数据的最佳方法.我想使用类似validates_presence_of的东西,但是期望所有正在验证的数据在保存时都可用...在我的情况下,整个表格在完成每个部分之前都不会被填写.
如果有办法,最好的方法是什么?
您可以使用: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)
您可能还想考虑使用状态机.