2010-05-17 13 views
6

Tengo una declaración 'validate_on_create' en uno de mis controladores que me gustaría omitir todos mis datos iniciales. ¿Cuáles son algunas soluciones para que la sentencia create en mi archivo de semillas omita esta validación? Mi solución actual es comentar la validación cada vez que ejecuto rake db: seed. ¿Algo un poco más inteligente?Ruby on Rails: omitiendo la declaración 'validate_on_create' para semillas

Respuesta

5

¿Ha considerado la adición de un atributo en el modelo que se comprueba en el método validate_on_create?

Ejemplo:

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, ......) 
+1

¿Hay ¿Rails 4 equivalente a esto? Creo que 'validate_on_create' está en desuso, ¿verdad? –

4

Puede omitir las validaciones llamando al model.save(false) en sus semillas, suponiendo que no las está cargando mediante accesorios.

+2

Pero yo estoy usando la función en el archivo de inicialización de crear. ¿Estás sugiriendo que no? – JackCA

+0

así que en lugar de 'crear' use la función 'compilar' –

+0

es Rails 3 y es para una creación de objeto no múltiple –

1

Puede saltear explícitamente todas las validaciones cuando guarda un objeto llamando al object.save(false).

Por ejemplo:

# 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) 
+0

Lo sé, pero me gustaría usarlo con: 'Model.create' en lugar de' Model.save (falso) ' –

+0

No hay opción para saltear validaciones cuando se llama a' object.create'. ¿Por qué no simplemente llamar a 'object.save (false)'? – nfm

+2

porque estoy creando una gran cantidad de objetos como este: 'modelos = Model.create ([{: nombre =>" Nombre "}, {: nombre =>" Segundo nombre "}])' –