2010-12-26 5 views
10

Mi piacerebbe dividere il file seeds.rb in più sezioni per facilitare la manutenzione; seminare tutte le A in a.rb, le B in b.rb, ecc. I file separati si trovano nella directory db/con seed.rb. Ogni file è composto da un gruppo di chiamate "A.create" o "B.create" e desidero chiamare tali file da seeds.rb.Dividi seed.rb in più sezioni?

ho provato:

include 'a' 
include 'b' 

e

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

nel mio seeds.rb ma non sembrano essere trasformati quando io chiamo "rake db: seed". Questa è probabilmente più una domanda ruby ​​diritta che una domanda di rails, ma per completezza sto usando Ruby 1.9.2 e Rails 3 su un Mac.

risposta

20

In ./db/seeds/my_module.rb:

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

In ./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

Non sono sicuro che inserirli in 'db/migrate' è un'ottima idea; migrazioni e semi sono diversi e dovrebbero essere trattati come tali. Invece, una directory 'db/seed' sarebbe probabilmente migliore. – vonconrad

+3

Sì, per favore non metterli in 'db/migrate', appartengono a una cartella separata come' db/seed'. –

+0

Ha funzionato come un incantesimo, ovviamente. Grazie! (E li ho messi in una directory separata "semi") – GSP

1

vorrei proporre di creare un nuovo db/seeds/ directory in cui è possibile inserire il vari file di semi:

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

E quindi modificare il file db/seeds.rb con :

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

Quindi, puoi caricare i tuoi semi anche nell'ordine che preferisci - che è spesso richiesto.


Questa soluzione è stata originariamente proposta da nathanvda in questo "duplicated" question.