在 Rails 中播种数据库的最佳方法是什么?

2023-12-29

我有一个 rake 任务,可以在我的 Rails 应用程序中填充一些初始数据。例如,国家、州、移动运营商等。

我现在设置的方式是,我在 /db/fixtures 的文件中有一堆 create 语句,以及一个处理它们的 rake 任务。例如,我的一个模型是主题。我在 /db/fixtures 中有一个 theme.rb 文件,如下所示:

Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
                      :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
                      :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
                      :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
                      :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)

Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
                      :component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
                      :join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
                      :cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"

这里的想法是我想安装一些常用主题供用户开始使用。我对这个方法有疑问。

设置ID不起作用。这意味着,如果我决定添加一个主题,我们将其称为“红色”,那么我只想将主题语句添加到此固定文件中,并调用 rake 任务来重新设定数据库种子。如果我这样做,因为主题属于其他对象并且它们的 id 在重新初始化时发生变化,所以所有链接都会被破坏。

我的问题首先是,这是处理数据库种子的好方法吗?在之前的文章中,有人向我推荐过这个。

如果是这样,我该如何对 ID 进行硬编码,这有什么缺点吗?

如果没有,为数据库播种的最佳方法是什么?

我将真正欣赏包含最佳实践的长期且深思熟虑的答案。


更新是因为这些答案稍微过时了(尽管有些答案仍然适用)。

Rails 2.3.4 中添加的简单功能,db/seeds.rb

提供新的 rake 任务

rake db:seed

适合填充常见的静态记录,如州、国家等......

http://railscasts.com/episodes/179-seed-data http://railscasts.com/episodes/179-seed-data

*请注意,如果您已经创建了固定装置,则可以使用固定装置来填充 db:seed 任务,方法是将以下内容放入您的 seeds.rb 文件中(来自 Railscast 剧集):

require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems")

对于 Rails 3.x,使用 'ActiveRecord::Fixtures' 而不是 'Fixtures' 常量

require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "fixtures_file_name")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 中播种数据库的最佳方法是什么? 的相关文章

  • Rails:如何在setter方法中使父属性可用

    Context 我有一个company模型有很多projects 有很多tasks The company也有很多employees 这又具有许多tasks Schema Problem 我正在构建一个表单来创建一个项目 用户可以在其中添加
  • Rails 数据库默认值和布尔字段的模型验证

    在 Rails 模型中我有一个属性is subscriber 当我构建数据库迁移以将此列添加到数据库时 我指定默认值为 false t boolean is subscriber default gt false 我还在模型中指定了该属性需
  • HSQLDB - 这是主数据库文件

    我在嵌入模式下使用 HSQLDB jdbc hsqldb file abc TESTDB 创建数据库后 文件夹abc有以下文件 TESTDB lck TESTDB script TESTDB log TESTDB properties 我的
  • Oracle SQL:从表中选择数据和分区名称并截断分区

    这是一个由两部分组成的问题 1 是否可以根据数据所在的分区使用 select 语句检索其名称ROWID或者其他一些标识符 eg SELECT DATA ID CATEGORY VALUE PARTITION NAME FROM MYTABL
  • 在JPA、关系型数据库等中,什么是Tuple? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在研究 Hibernate 和 JPA 并且一直在寻找这个术语 有人可以用实用和说教的方式向我解释一下这个术语是什么 以及它与 J
  • 使用 webpacker 部署到 heroku 后,资产不存在于资产管道中

    我正在使用 Rails 5 2 3 我可以在本地下载 pdf 但Heroku它通过错误 500 错误是 ActionView Template Error 资源 pdf css 不存在于资源管道中 这是我的 Heroku 日志 2019 0
  • 数据库表可以没有主键吗?

    谁能告诉我关系数据库 例如MySQL SQL SERVER 中的表是否可以没有主键 例如 我可以有桌子day temperature 我注册的地方temperature and time 我不明白为什么要为这样的表设置主键 从技术上讲 您可
  • 在 selenium webdriver 中使用 phantomjs 代理

    我正在尝试在 selenium webdriver 2 25 的 ruby 1 8 7 脚本中使用 PhantomJS 1 9 1 配置代理 我看到了一些使用 Firefox 的例子 我用这个浏览器成功地做到了 我使用了这段代码 profi
  • 在 sorbet 中,你能指定一个类型是一个类的后代吗?

    我有一个方法返回一个对象 该对象可能是许多不同类型的对象之一 但它们都是同一祖先类的一部分 精确的对象类型是动态推断的 但是 我对签名中返回值的内容感到困惑 我在下面使用了一个占位符instance of来说明问题 sig params i
  • 在数据库中存储多维数组:关系数组还是多维数组?

    我读过很多类似的帖子多维到单维 多维数据库等等 但没有一个答案有帮助 我确实在谷歌上找到了很多文档 但只提供了背景信息 并没有回答手头的问题 我有很多彼此相关的字符串 PHP 脚本中需要它们 结构是分层的 这是一个例子 A AA AAA A
  • ruby 1.9 如何将数组转换为不带括号的字符串

    我的问题是关于如何在 ruby 1 9 中将数组元素转换为字符串而不需要括号和引号 我有一个数组 数据库提取 我想用它来创建定期报告 myArray Apple Pear Banana 2 15 12 在 ruby 1 8 中我有以下行 r
  • 找到具有公共键的哈希数组的最大值?

    我有两个数组 每个数组包含任意数量的具有相同键但不同值的哈希值 ArrayA value abcd value length 4 type 0 value abcdefgh value length 8 type 1 ArrayB valu
  • 如何触发并忘记子进程?

    我有一个长时间运行的进程 我需要它来启动另一个进程 该进程也会运行很长一段时间 我只需要开始它 然后就完全忘记它 我设法通过从 Ruby 编程 一书中获取一些代码来完成我需要的操作 但我想找到最好 正确的方法 并了解发生了什么 这是我最初得
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 如何在 Rails Active Admin 中添加 Colorpicker?

    我想实现这个http www eyecon ro colorpicker about http www eyecon ro colorpicker about或活动管理表单之一中的任何其他颜色选择器 任何帮助表示赞赏 谢谢 GS 因为你想使
  • Capistrano 无法部署到远程服务器

    SOLUTION 解决方案是将以下内容添加到 production rb 的顶部 unshift File expand path lib ENV rvm path Add RVM s lib directory to the load p
  • Rails 5 api - 未定义的方法“user_url”

    我在 API 模式下使用 Rails 5 启动了一个新项目 目前我只是创建项目 设置数据库并使用脚手架命令 rails g scaffold User 我用邮递员尝试我的代码来创建一个新用户 POST Request URI localho
  • has_one 有两个外键?

    我有两个类 消息 和 用户 消息具有 sender id 和recipient id 这两个用户的外键 如何建立关系 使我能够获取发件人和收件人的用户 例如 message sender name 和 message recipient n
  • 如何使用 Fabrication 定义特质

    我正在学习如何使用制造 http www fabricationgem org getting started in Rails我们决定更换所有factory girl代码与制造 假设我们有这段代码factory girl FactoryG
  • 有没有办法从 UTF-8 编码的文件中删除 BOM?

    有没有办法从 UTF 8 编码的文件中删除 BOM 我知道我所有的 JSON 文件都是以 UTF 8 编码的 但是编辑 JSON 文件的数据录入人员将其保存为带 BOM 的 UTF 8 当我运行 Ruby 脚本来解析 JSON 时 它失败并

随机推荐