Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails partial table validations

I have a form that I'm trying to create which is broken up into sections. Each section saves a little bit of info to that table and then moves on to the next page. I'm trying to figure out the best way to validate the data for each section in the model. I was to use something like validates_presence_of, but that expects all of the data that is being validated will be available upon saving... In my case, the entire table won't be filled out until they're done going through each section.

What's the best way to do this if there is a way?

like image 762
intargc Avatar asked Apr 18 '26 01:04

intargc


1 Answers

You can make validations conditional with the :if or :unless options. If you add a "step" column to your table you can use this to validate the model along the way.

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

You can then increment the step count each time in your controller.

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

You may also want to consider using a state machine.

like image 159
ryanb Avatar answered Apr 20 '26 15:04

ryanb



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!