2010-12-26 16 views
10

Я хотел бы разделить файл seeds.rb на несколько разделов для удобства обслуживания; засевают все A в a.rb, B в b.rb и т. д. Отдельные файлы находятся в каталоге db/с помощью seeds.rb. Каждый файл состоит из группы звонков «A.create» или «B.create», и я хочу вызвать эти файлы из seeds.rb.Разделить seeds.rb на несколько разделов?

Я пробовал:

include 'a' 
include 'b' 

и

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

в моем seeds.rb, но они, кажется, не быть обработаны, когда я называю "грабли БД: семена". Вероятно, это скорее вопрос с прямым рубином, чем вопрос с рельсами, но для полноты я использую Ruby 1.9.2 и Rails 3 на Mac.

ответ

20

В ./db/seeds/my_module.rb:

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

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

Я не уверен, что положить их в 'db/migrate' - отличная идея; миграции и семена различны и должны рассматриваться как таковые. Вместо этого каталог 'db/seed', вероятно, будет лучше. – vonconrad

+3

Да, пожалуйста, не помещайте их в 'db/migrate', они принадлежат к отдельной папке, такой как' db/seed'. –

+0

Работал, как шарм, конечно. Спасибо! (И, я помещаю их в отдельный каталог «seed») – GSP

1

Я хотел бы предложить, чтобы создать новый db/seeds/ каталог, в котором вы можете разместить различные семена файл:

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

И затем отредактируйте файл db/seeds.rb с помощью :

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

Таким образом, вы можете загружать свои семена даже в том порядке, в котором вы предпочитаете, - что часто требуется.


Это решение изначально было предложено nathanvda в этом "duplicated" question.

Смежные вопросы