2009-01-28 20 views
2

我必须具体说明这一点。在我的应用程序中,我有一个称为主题的模型,其中包含小部件颜色主题信息我们提供了几个主题,但主要依赖用户创建自己的主题。所以问题是:我在哪里存储我的主题?如果我将它们存储在主题数据库中,那么无论何时我在切换数据库或在测试期间刷新数据库时,都必须重新输入主题。这不是一个大问题,它看起来很sl。。对于我的一个模型,我有几个应该自动填充的实例。我该如何处理?

现在我把主题存储在控制器的散列中。问题在于每个小部件都有一个主题,每个小部件都有一个theme_id,并且我们提供的主题没有theme_id,因为它们不存储在数据库中。

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

谢谢!

Tony

回答

4

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

3

主题数据属于数据库。

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

我用下面的Rake任务种子与DB/seeddata内SQL文件中保存数据的数据库(把它放进一个.rake文件项目的/ lib目录下):

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 
1

你的想法种子数据似乎是要走的路。我喜欢你提出的方法,但你如何看待这里提出的方法: http://railspikes.com/2008/2/1/loading-seed-data

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

你认为哪个更好?

再次感谢!

托尼

+0

我认为这取决于种子数据来自何处。我自己生成我的,所以我知道这将是有效的,并且可以使用更简单的方法。 – 2009-01-28 22:08:48

相关问题