views:

144

answers:

3

I have a 'validate_on_create' statement in one of my controllers that I would like all of my seed data to skip. What are some solutions so that the create statement in my seeds file skips this validation. My current solution is commenting out the validation each time I run rake db:seed. Anything a little more clever?

+3  A: 

You can skip validations by calling model.save(false) on your seeds, assuming you are not loading them via fixtures.

Chubas
But I am using the create function in the seed file. Are you suggesting I don't?
Jack
so instead of 'create' use 'build' function
Greg Dan
it's Rails 3 and it's for one object creation not multiple
KARASZI István
A: 

You can explicitly skip all validations when you save an object by calling object.save(false).

For example:

# In your model
def validate_on_create
  # An example validation - replace with whatever you like
  return true unless name.blank?
end

# In db/seeds.rb
# Create a new person
p = Person.new(:name => 'Bob')
# Save the record to the database, and *skip validation*
p.save(false)
nfm
I know about that, but I would like to use it with: `Model.create` instead of `Model.save(false)`
KARASZI István
There's no option to skip validations when you call `object.create`. Why not just call `object.save(false)`?
nfm
because I'm creating a lot of objects like this:`models = Model.create([{ :name => "First name" }, { :name => "Second name" }])`
KARASZI István
+1  A: 

Have you considered adding an attribute in the model which is checked in the validate_on_create method?

Example:

class MyModel < ActiveRecord::Base

  attr_accessor :skip_on_create_validation

  def validate_on_create
    unless skip_on_create_validation
      # do validation
    end
  end

end

# In db/seeds.rb
MyModel.create(:skip_on_create_validation => true, ......)
Sidane