【问题标题】:Split seeds.rb into multiple sections?将 seed.rb 拆分为多个部分?
【发布时间】:2011-05-30 18:57:41
【问题描述】:

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

【问题讨论】:

    标签: ruby ruby-on-rails-3 seed


    【解决方案1】:

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

    【讨论】:

    • 我不确定将它们放入db/migrate 是否是个好主意;迁移和种子是不同的,应该这样对待。相反,db/seed 目录可能会更好。
    • 是的,请不要将这些放在db/migrate 中,它们属于单独的文件夹,例如db/seed
    • 当然,工作就像一个魅力。谢谢! (而且,我把它们放在一个单独的“种子”目录中)
    【解决方案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 中提出的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2012-11-10
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      相关资源
      最近更新 更多