11

我想将我的seeds.rb 文件分成多个部分以便于维护;在 a.rb 中播种所有 A,在 b.rb 中播种 B,等等。单独的文件位于 db/ 目录中,并带有种子.rb。每个文件由一堆“A.create”或“B.create”调用组成,我想从seeds.rb 调用这些文件。

我试过了:

include 'a'
include 'b'

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

在我的seeds.rb 中,但是当我调用“rake db:seed”时它们似乎没有被处理。这可能更像是一个直接的 ruby​​ 问题而不是 rails 问题,但为了完整起见,我在 Mac 上使用 Ruby 1.9.2 和 Rails 3。

4

2 回答 2

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
于 2010-12-26T05:38:02.463 回答
4

我建议创建一个新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 在这个“重复的”问题中提出的。

于 2017-02-09T08:48:16.917 回答