¿Cómo uso un archivo YAML en vez de seeds.rb para cargar los datos iniciales en una base de datos?Ruby on Rails: carga de datos de inicialización de un archivo YAML
Respuesta
Mira la Ruby on Rails Guía de accesorios:
http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures
En general, puede crear archivos de datos YAML en el directorio test/
y luego cargarlos en la base de datos utilizando el comando rake db:fixtures:load
. La documentación completa sobre todas las cosas interesantes que puedes hacer con los accesorios está aquí:
¿Funcionará lo mismo para el desarrollo o la producción? – fijiaaron
El último enlace está roto. Además, cargar datos de semilla de 'prueba /' no parece ser la forma correcta de hacer las cosas. – Zaz
Me hace sentir incómodo también, pero en la práctica algunas personas usan dispositivos para completar datos con fines de prueba. Tener el mismo yaml siembra archivos en dos lugares se siente aún más ... asqueroso. – jaydel
Añadir un código en db/seeds.rb
para analizar el archivo YAML, por ejemplo:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)
Luego, basta con colocar el YAML fie en db/seeds/categories.yml
. El archivo YAML debe ser una lista de matrices asociativas, ej .:
- name: accessory
shortcode: A
- name: laptop
shortcode: L
- name: server
shortcode: S
El problema con esta solución es que si ejecuta 'rake db: seed' un segundo tiempo, obtendrás un montón de duplicados. Dependiendo de los requisitos de singularidad, es probable que desee modificar la última línea para que sea algo como: 'config.each {| values | Category.first_or_create (values)} ' – sberkley
¿En qué situación le gustaría sembrar la base de datos dos veces? 'rake db: reset' hace todo lo que necesita el 99% del tiempo. – Zaz
Si agrega nuevos valores sembrados a la tabla o agrega una nueva tabla con valores sembrados. Dejar caer toda la base de datos puede ser una solución en un entorno de desarrollo, pero ciertamente no está en producción. Dejar caer la tabla sembrada antes de volver a sembrar tampoco es una opción si hay referencias a los identificadores de esa tabla en otra tabla. Si necesita eliminar valores previamente sembrados, la situación se complica aún más y puede requerir una solución más allá de 'rake db: seed'. – sberkley
utilicé la respuesta @Zaz respondió. Funciona muy bien.
Pero mientras tanto, si algo salió mal con sus datos de inicialización (Por ejemplo, tiene un archivo yaml de semilla muy grande), le gustaría saber qué parte de su yaml salió mal. ¡En ese momento puedes agregar un bloque después de crear! para la depuración de esta manera:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
counter = 0
Category.create!(config) do |c|
puts "Create category #{counter += 1} with name: #{c.name}"
end
- 1. Ruby on Rails Carga de archivo AJAX
- 2. Carga de archivos en Ruby on Rails
- 3. Copie un archivo en Ruby on Rails
- 4. Carga de archivos múltiples en Ruby on Rails 3
- 5. ¿Hay un archivo de Ruby on Rails layouts/css?
- 6. Almacenar datos en Ruby on Rails sin base de datos
- 7. Usos de Ruby on Rails
- 8. Crear archivo descargable en Ruby on Rails
- 9. ¿Cómo subir un archivo en ruby on rails?
- 10. Base de datos de objetos para Ruby on Rails
- 11. Ruby vs. Ruby on Rails
- 12. Problemas de Ruby on Rails en heroku
- 13. Ruby on rails tamaño de archivo de registro demasiado grande
- 14. ¿Cómo descomprimir un archivo en Ruby on Rails?
- 15. Ruby on Rails will_paginate
- 16. Ruby on Rails enviar
- 17. Ruby on Rails Switch
- 18. Ruby on Rails: Cómo ordenar un collection_select
- 19. Docsplit Ruby on Rails
- 20. Ruby on Rails: ¿Puedo modificar los datos antes de guardarlos?
- 21. Ruby on Rails: descargable
- 22. ¿Cómo configurar Ruby on Rails sin base de datos?
- 23. Ruby on Rails Rake Error
- 24. Ruby on Rails: Running Tests
- 25. Ruby on Rails: ejecutando un archivo .rb desde IRB
- 26. Acción de transacción con Ruby On Rails
- 27. Ruby on Rails: mostrar condicionalmente un
- 28. Ruby on Rails config.secret_token error
- 29. Ruby on Rails versus Python
- 30. Guía de autenticación de Ruby on rails
En vista de que la respuesta aceptada no es muy grande (pone los datos de semillas en 'test /' directorio), y [mi respuesta] (http://stackoverflow.com/a/24957205/405550) tiene significativamente más upvotes, ¿podrías considerar aceptar el mío? – Zaz