【问题标题】:Insert a row using db migration - ruby使用数据库迁移插入一行 - ruby
【发布时间】:2015-12-10 20:35:08
【问题描述】:

我是 ruby​​ on rails 的新手。我需要使用 db 迁移在现有表中插入一行,该表已经有 200 多行数据,我还需要再插入一行。

我已经创建了一个迁移文件,如下所示,

class AddNewGrowingMethodToEnumValues < ActiveRecord::Migration
  execute "INSERT INTO enum_values (enum_type, name, gdsn, created_at, updated_at) VALUES ('growing', 'Organic', '', now(), now())"
end

它是正确的/好的吗?

谁能帮我迁移以正确/标准的方式插入单行。

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

你可以这样写:

class AddNewGrowingMethodToEnumValues < ActiveRecord::Migration
  enum_value = EnumValue.create(enum_type: 'growing', name: 'Organic', gdsn: '')
end

无需写created_atupdated_at。当我们运行migration 时,rails 将为它们填充值。

【讨论】:

    【解决方案2】:

    您不应使用迁移将数据插入数据库。迁移用于创建数据库结构。

    如果你必须插入准备好的数据,你应该使用db/目录下的seeds.rb文件。

    文件中有一个简短的说明,描述了您应该如何使用它。

    编码愉快:)

    【讨论】:

    • 嗯,我将不得不继续并不同意这一点。如果您有包含静态引用值的表,那么通过迁移来维护它们是完全合法的。您还可以使用迁移来创建新表并从其他地方的现有数据填充它,例如,如果您正在对现有数据进行规范化或非规范化。
    • 您在某些时候可能是对的。但是,如果您有一个具有 动态 状态的数据库,否则您不会将它们插入数据库而是使用硬编码状态,那么它们不应该已经在迁移中。如果以后应该以不同的方式使用该应用程序怎么办? Rails 指南也在Migration Guide 的标题中说:Migrations are a feature of Active Record that allows you to evolve your database schema over time.。所以我认为最干净的方法是使用seeds 或自定义import 'script'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2016-08-03
    • 2011-01-07
    • 2017-02-10
    • 2019-12-02
    相关资源
    最近更新 更多