我想将seeds.rb文件分成多个部分以便于维护;在a.rb中播放所有A,在b.rb中播放B等。单独的文件位于带有seeds.rb的db /目录中。每个文件都包含一堆“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。
答案 0 :(得分: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
答案 1 :(得分:2)
我建议创建一个新的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中提出。