Cargar datos de semilla en Proyecto Rails 3

Hasta ahora, he estado utilizando Fixtures, junto con una tarea de rake para crear algunos datos semilla para mi base de datos. Esto funcionó bien, pero de repente tengo problemas extraños (como obtener identificaciones autógenas de 1,2,3 .. en un modelo y luego identificaciones erróneas en el modelo de unión, haciendo que la asociación no funcione en absoluto).

Por lo tanto, me preguntaba cuál es una mejor alternativa. He leído sobre diferentes cosas, así como también sobre el outlook de los datos de siembra.

Mis datos no comparten realmente la misma información. Es como entradas separadas que se deben insertar como son. Por ejemplo, piense que tengo que insertar 1000 usuarios que tienen habilidades particulares. Esto necesita algunos modelos de unión y un manejo ordenado de las asociaciones como lo hacen los accesorios.

Entonces, ¿hay una manera mejor que los accesorios para lograr eso?

Aquí hay tres opciones diferentes que utilizo todo el tiempo. Déjame saber qué piensas y cómo te va. Todo lo mejor.

Github Gist >>

Rails 3 proporciona algunas capacidades básicas de siembra. Consulte: http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding

Resumir:

  • Puede poner cualquier código de inicio (en Ruby, usando sus modelos AR) en db/seeds.rb
  • Luego ejecute rake db:seed para cargar esto ( rake db:setup hace automáticamente)

En mi archivo de semillas, tiendo a envolver todo en una transacción y también a definir las ID manualmente (suponiendo que no hay datos existentes en la base de datos). Punta de sombrero para la gem Prólogo . Ejemplo:

 ActiveRecord::Base.transaction do if User.count == 0 && Role.count == 0 user = User.new :name => "Admin", :email => "admin@example.org", :password => "password", :password_confirmation => "password" user.id = 1 user.save! user.confirmed_at = user.confirmation_sent_at user.save! role1 = Role.new :name => 'Admin' role1.id = 1 role1.save! role2 = Role.new :name => 'Member' role2.id = 2 role2.save! user.role_ids = [1,2] user.save! end end 

Puede haber mejores formas de hacer esto!

En su caso, podría cargar datos de un archivo CSV o algo así y crear los objetos del modelo mediante progtwigción.

La ID fija puede ser útil para los datos predeterminados en la base de datos. en el caso de @jits, él no quiere que la ID y el permiso de la función se desordenen, se requiere que las ID se fijen y mantengan constantemente en varios entornos o configuraciones.