2

我必须具体说明这一点。在我的应用程序中,我有一个名为主题的模型,其中包含小部件颜色主题信息。我们提供了一些主题,但主要依靠用户创建自己的主题。所以问题是:我在哪里存储我的主题?如果我将它们存储在主题数据库中,那么每当我在测试期间切换数据库或刷新它时,我都必须重新输入主题。这不是什么大不了的事,只是看起来很草率。

现在我将主题存储在控制器的哈希中。这样做的问题是因为每个小部件都有一个主题,每个小部件都有一个主题 ID,并且我们提供的主题没有主题 ID,因为它们没有存储在数据库中。

我知道这个问题的解决方案非常简单,但我想确保我的解决方案采用最佳编码实践。有人对此有什么建议吗?也许有一种方法可以在迁移或其他 rake 任务期间将条目添加到数据库中......

谢谢!

托尼

4

3 回答 3

4

在迁移中加载种子数据是最有意义的,也是我经常做的事情。如果创建前几条记录确实是正确初始化表的一部分,即如果没有它们,您的表根本无法完成应用程序中所需的工作,那么它们属于迁移。Rake 任务非常适合捕获您需要根据命令加载到应用程序中的数据集(例如,对于演示),但如果始终需要某些记录,那么迁移就是当场。

于 2009-01-30T07:59:48.740 回答
3

主题数据属于数据库。

对于测试,使用夹具或方法初始化主题数据setup。对于开发和生产,您应该创建一种使用初始主题数据播种数据库的方法。自定义 Rake 任务对此很有用。实际的主题数据可以以您希望的任何格式存储,真的。例如 SQL 脚本或YML 固定装置

我使用以下 Rake 任务使用 db/seeddata 中的 SQL 文件中保存的数据为数据库播种(将其放在项目的 /lib 目录下的 .rake 文件中):

namespace :db do
  desc "Load seed fixtures (from db/seeddata) into the current environment's database." 
  task :seed => :environment do
    require 'yaml'
    config = YAML::load(open("#{RAILS_ROOT}/config/database.yml"))["#{RAILS_ENV}"]
    Dir.glob(RAILS_ROOT + '/db/seeddata/*.sql').each do |file|
      cmd = "mysql -u #{config['username']} -p#{config['password']} -h #{config['host']} #{config['database']} < #{file}"
      `#{cmd}`
    end
  end
end
于 2009-01-28T21:09:15.393 回答
1

您播种数据的想法似乎是可行的方法。我喜欢你提出的方法,但你觉得这里提出的方法如何: http ://railspikes.com/2008/2/1/loading-seed-data

它建议您让 ActiveRecord 处理播种数据,以便它可以验证数据。

你认为哪一个更好?

再次感谢!

托尼

于 2009-01-28T21:41:55.263 回答