【问题标题】:Split seeds.rb file [duplicate]拆分种子.rb 文件 [重复]
【发布时间】:2011-12-18 23:42:28
【问题描述】:

我的seeds.rb 文件变得非常大。重构文件中数据的最佳方法是什么?

我可以把数据放到各种文件中,require它们在seeds.rb文件中吗?

【问题讨论】:

    标签: ruby-on-rails ruby refactoring


    【解决方案1】:

    我们将所有种子存储在文件夹db/seedsdb/seeds.rb 中,我们编写以下内容:

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

    我们在加载文件之前按字母顺序对文件进行排序,因此我们可以确保文件按顺序处理(通过明智地选择文件名,例如 01_operators.rb, 02_companies.rb, 03_products.rb ... 之类的名称)。

    希望这会有所帮助。

    【讨论】:

    • 超级有帮助。我到处寻找解决这个问题的好方法。感谢您发帖。
    • 如果您正在编写 Rails 引擎,请注意使用 YourEngineName::Engine.root 而不是 Rails.root
    • 这似乎更容易,然后您可以在种子文件中向上/向下移动行而不是重命名文件:stackoverflow.com/a/4532890/380607
    • 更简单?在链接的答案中,必须创建文件 编辑 seed.rb 文件以加载它? ?? 我很懒,而且我有很多种子文件。但我知道人们可能更喜欢明确性。如果它对你更好,那就太棒了??
    • @nathanvda 好主意,但将其命名为 01 02 只是在重组时自找麻烦。将其命名为 01000200,如果您想在 1 和 2 之间移动 99,只需将其命名为 0150,而不必将 02 重命名为 98。如果您将数字间隔 X(在本例中为 100),并始终选择中间数字,则在需要重命名某些内容以获得新的一个。自从您最初发布此内容以来已经有几年了,希望您现在已经解决了。
    【解决方案2】:

    由于您的 seeds.rb 文件是 Ruby,因此您可以在其中执行任何可以在 Ruby 中执行的操作。像 routes.rbGemfile 一样,如果需要,您可以发挥创意。

    请确保您没有做任何如此疯狂的事情,以至于实际上需要进行一些调试。只要你保持你的行动清晰,就不应该有混乱。也就是说,不要使用在其他文件中定义的自定义帮助方法,这些方法可能会出现故障并且必须手动追踪。在做这样的事情时,最好坚持最简单的解决方案。

    【讨论】:

    • 在seeds.rb 文件中包含这个:需要“#{Rails.root}/db/data.rb”。它似乎没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2016-11-21
    • 2019-01-22
    • 2011-11-03
    • 2011-09-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多