2010-12-26 8 views
10

Chciałbym podzielić mój plik seeds.rb na wiele sekcji w celu ułatwienia konserwacji; wstaw wszystkie A w pliku a.rb, B w pliku b.rb itd. Oddzielne pliki znajdują się w katalogu db/z plikiem seeds.rb. Każdy plik składa się z połączenia "A. tworzenie" lub "B. tworzenie" i chcę wywołać te pliki z seeds.rb.Podziel seeds.rb na wiele sekcji?

Próbowałem:

include 'a' 
include 'b' 

i

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

w moim seeds.rb ale oni nie wydają się być przetwarzane, kiedy nazywają "rake db: seed". Jest to prawdopodobnie bardziej proste rubinowe pytanie niż pytanie o szynę, ale dla kompletności używam Ruby 1.9.2 i Rails 3 na Macu.

Odpowiedz

20

W ./db/seeds/my_module.rb:

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

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

Nie jestem pewien, czy umieszczenie ich w 'db/migrate' jest świetnym pomysłem; migracje i nasiona są różne i powinny być traktowane jako takie. Zamiast tego katalog 'db/seed' prawdopodobnie byłby lepszy. – vonconrad

+3

Tak, proszę nie umieszczać ich w 'db/migrate', należą one do osobnego folderu, takiego jak' db/seed'. –

+0

Oczywiście zadziałało jak urok. Podziękować! (I, umieściłem je w osobnym katalogu "nasiona") – GSP

1

chciałbym zaproponować, aby utworzyć nowy db/seeds/ katalog, w którym można umieścić różne plik Nasiona:

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

I następnie zmodyfikuj swój plik db/seeds.rb za pomocą :

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

Możesz więc załadować nasiona nawet w wybranej przez siebie kolejności - często jest to wymagane.


To rozwiązanie zostało pierwotnie zaproponowane przez nathanvda w tym "duplicated" question.

Powiązane problemy