2010-12-26 12 views
10

Me gustaría dividir mi archivo seeds.rb en varias secciones para facilitar el mantenimiento; sembrar todas las A en a.rb, las B en b.rb, etc. Los archivos separados se encuentran en el directorio db/con seeds.rb. Cada archivo consiste en un grupo de llamadas "A.create" o "B.create" y quiero llamar a esos archivos desde seeds.rb.¿Separó seeds.rb en secciones múltiples?

que he probado:

include 'a' 
include 'b' 

y

load 'a.rb' 
load 'b.rb' 

en mi seeds.rb pero no parecen ser procesados ​​cuando llamo "rake db: semilla". Esta es probablemente una cuestión de rubíes más directa que una cuestión de rieles, pero para estar completo estoy usando Ruby 1.9.2 y Rails 3 en una Mac.

Respuesta

20

En ./db/seeds/my_module.rb:

module MyModule 
    puts "In my_module.rb" 
    # add code here 
end 

En ./db/seeds.rb:

require File.expand_path('../seeds/my_module', __FILE__) # the ../ just removes `seeds.rb` filename from the path which is given by __FILE__ 

p "In seeds.rb" 
# add code here 
+9

No estoy seguro de si ponerlos en 'db/migrate' es una gran idea; las migraciones y las semillas son diferentes y deben tratarse como tales. En cambio, un directorio 'db/seed' probablemente sería mejor. – vonconrad

+3

Sí, no los coloque en 'db/migrate'; pertenecen a una carpeta separada, como' db/seed'. –

+0

Funcionó como un encanto, por supuesto. ¡Gracias! (Y los puse en un directorio separado de "semillas") – GSP

1

yo propondría para crear un nuevo db/seeds/ directorio en el que se puede colocar el vario archivo de semillas:

db/seeds/01_stuff_that_comes_for_first.rb 
db/seeds/02_stuff_that_comes_for_second.rb 
... 

Y luego edite su archivo db/seeds.rb con :

Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].sort.each { |seed| load seed } 

Por lo tanto, puede cargar sus semillas, incluso en el orden que prefiera - que a menudo es algo solicitado.


Esta solución fue propuesto originalmente por nathanvda en este "duplicated" question.

Cuestiones relacionadas