Pregunta

Tengo una tarea rake que rellena algunos datos iniciales en mi rieles aplicación. Por ejemplo, países, estados, compañías de telefonía móvil, etc.

La forma en que tengo configurado ahora, es que tengo un montón de declaraciones de crear archivos en / db / accesorios y una tarea rake que los procesa. Por ejemplo, un modelo que tengo es temas. Tengo un archivo en theme.rb / db / accesorios que tiene este aspecto:

Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
                      :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
                      :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
                      :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
                      :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
                      :component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"

La idea aquí es que quiero instalar algunos temas de valores para que los usuarios comienzan con. Tengo un problema con este método.

Configuración de la ID no funciona. Esto significa que si decido añadir un tema, vamos a llamarlo 'Roja', entonces me gustaría simplemente para añadir el tema de la declaración a este archivo de datos y llamar a la tarea rastrillo para sembrar de nuevo la base de datos. Si hago eso, porque los temas pertenecen a otros objetos y el cambio de su identificación sobre esta re-inicialización, todos los enlaces están rotos.

Mi pregunta es, ante todo, esta es una buena manera de manejar la siembra de una base de datos? En un post anterior, este fue recomendado para mí.

Si es así, ¿cómo puedo codificar el identificaciones, y si existen inconvenientes para que?

Si no es así, ¿cuál es la mejor manera de sembrar la base de datos?

Me podrá apreciar verdaderamente largo y pensado respuestas que incorporan las mejores prácticas.

¿Fue útil?

Solución

La actualización ya que estas respuestas no están actualizados ligeramente (aunque algunos todavía se aplican).

función simple agregado en los carriles 2.3.4, db / seeds.rb

Proporciona una nueva tarea rastrillo

rake db:seed

Bueno para poblar registros estáticos comunes como estados, países, etc ...

http://railscasts.com/episodes/179-seed-data

* Tenga en cuenta que puede utilizar los accesorios si ya los había creado para rellenar también con el PP: tarea de semillas colocando lo siguiente en su archivo seeds.rb (desde el episodio Railscast):

require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems")

Para rieles uso 3.x 'ActiveRecord :: Accesorios' en lugar de 'Accesorios' constante

require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "fixtures_file_name")

Otros consejos

Por lo general, hay 2 tipos de datos de semillas requeridas.

  • Datos básicos en la que el núcleo de su aplicación puede confiar. Yo llamo a esto las semillas comunes.
  • Datos ambientales , por ejemplo, el desarrollo de la aplicación es útil tener un montón de datos en un estado conocido que nos podemos usar para trabajar en la aplicación a nivel local (la respuesta Factory Girl anterior cubre este tipo de datos).

En mi experiencia que estaba siempre viene a través de la necesidad de estos dos tipos de datos. Así que puse juntos tareas una pequeña joya que se extiende semillas Rails y le permite añadir múltiples archivos semilla común bajo db / semillas / y cualquier dato de semillas del medio ambiente bajo db / semillas / ENV por ejemplo db / semillas / desarrollo.

He encontrado este enfoque es suficiente para dar mis datos de semillas cierta estructura y me da el poder para configurar mi entorno de desarrollo o puesta en escena en un estado conocido sólo con la ejecución:

rake db:setup

Los accesorios son frágiles y raro para mantener, como son los vertederos de SQL normal.

factory_bot suena como que va a hacer lo que usted está tratando de lograr. Se pueden definir todos los atributos comunes en la definición por defecto y luego anularlos en tiempo de creación. También se puede pasar un id a la fábrica:

Factory.define :theme do |t|
  t.background_color '0x000000'
  t.title_text_color '0x000000',
  t.component_theme_color '0x000000'
  t.carrier_select_color '0x000000'
  t.label_text_color '0x000000',
  t.join_upper_gradient '0x000000'
  t.join_lower_gradient '0x000000'
  t.join_text_color '0x000000',
  t.cancel_link_color '0x000000'
  t.border_color '0x000000'
  t.carrier_text_color '0x000000'
  t.public true
end

Factory(:theme, :id => 1, :name => "Lite", :background_color => '0xC7FFD5')
Factory(:theme, :id => 2, :name => "Metallic", :background_color => '0xC7FFD5')
Factory(:theme, :id => 3, :name => "Blues", :background_color => '0x0060EC')

Cuando se utiliza con falsificador puede llenar una base de datos muy rápido con las asociaciones sin tener que enredar con accesorios (puaj).

Tengo un código como éste en una tarea de rastrillo.

100.times do
    Factory(:company, :address => Factory(:address), :employees => [Factory(:employee)])
end

Uso de archivo seeds.rb o FactoryBot es grande, pero estos son, respectivamente, grandes para las estructuras de datos fijos y pruebas.

El seedbank joya podría darle más control y la modularidad de sus semillas. Se inserta tareas rastrillo y también se puede definir dependencias entre sus semillas. Su lista de tareas rastrillo tendrá estas adiciones (por ejemplo.):

rake db:seed                    # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/ENVIRONMENT/*.seeds.rb. ENVIRONMENT is the current environment in Rails.env.
rake db:seed:bar                # Load the seed data from db/seeds/bar.seeds.rb
rake db:seed:common             # Load the seed data from db/seeds.rb and db/seeds/*.seeds.rb.
rake db:seed:development        # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/development/*.seeds.rb.
rake db:seed:development:users  # Load the seed data from db/seeds/development/users.seeds.rb
rake db:seed:foo                # Load the seed data from db/seeds/foo.seeds.rb
rake db:seed:original           # Load the seed data from db/seeds.rb

Los rieles se ha construido en forma de semilla de datos como se explica aquí .

Otra forma sería usar una joya para la siembra más avanzado o fácil como:. banco de semillas

La principal ventaja de esta joya y la razón por la que utilizo es que tiene capacidades avanzadas tales como dependencias de carga de datos y los datos por semillas de entorno.

Adición de una respuesta hasta la fecha como esta respuesta fue la primera en Google.

Añadir en migraciones de bases de datos, de esa manera todo el mundo obtiene como se ponen al día. Manejar toda la lógica en el código rubí / rieles, por lo que nunca tiene que meterse con los valores de ID explícitas.

La mejor manera es usar accesorios.

Nota:. Tenga en cuenta que los accesorios hacen inserciones directas y no utilizan el modelo de lo que si tiene que pueblan las devoluciones de llamada de datos tendrá que encontrar una solución

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top