【问题标题】:For one of my models, I have a few instances that should be auto-populated. How do I handle this?对于我的一个模型,我有一些应该自动填充的实例。我该如何处理?
【发布时间】:2009-01-28 20:56:07
【问题描述】:

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

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

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

谢谢!

托尼

【问题讨论】:

    标签: ruby-on-rails ruby database model constants


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      主题数据属于数据库。

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

      我使用以下 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
      

      【讨论】:

        【解决方案3】:

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

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

        你觉得哪个更好?

        再次感谢!

        托尼

        【讨论】:

        • 我认为这取决于种子数据的来源。我自己生成我的,所以我知道它是有效的并且可以使用更简单的方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多