views:

2222

answers:

4

I have a rails model that validates uniqueness of 2 form values. If these 2 values aren't unique the validation errors are shows and the "submit" button is changed to "resubmit". I want to allow a user to click the "resubmit" button and bypass the model validation. I want to do something like this from the rails validation documentation:

validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 }

but I don't have a a value in my model that I can check for...just the params that have the "Resubmit" value.

Any ideas on how to do this?

+1  A: 

Try this:

model.save(false)

It bypasses validations (all of them though).

zenazn
My title was kind of misleading...I dont want to totally bypass all of my validations, just the 2 validates_uniqeness_of
hacintosh
+1  A: 

Not positive about this, but you could try to add an attr_accessor to your model to hold whether or not the form has been submited once before.

just add

attr_accessor :submitted

to your model and check for it in your validations.

PJ Davis
+1  A: 

You can just look at the submit button to determine whether you want to perform the validations.

def form_method
  case params[:submit]
    when "Submit" 
      'Do your validation here'
    when "Resubmit" 
      'Do not call validation routine'
  end
end
allesklar
+11  A: 

In my opinion this is the best way to do it:

class FooBar < ActiveRecord::Base
  validates_uniqueness_of :foo, :bar, :unless => :force_submit
  attr_accessor :force_submit
end

then in your view, make sure you name the submit tag like

<%= submit_tag 'Resubmit', :name => 'foo_bar[force_submit]' %>

this way, all the logic is in the model, controller code will stay the same.

ucron
this looks like EXACTLY what I wanted to do. I'll try it today when I get to work.
hacintosh
worked great thanks!!!
hacintosh