当前位置: 首页 > 知识库问答 >
问题:

向表中添加列并修复Rails中现有记录的值

孙泳
2023-03-14

我想在我的“订单”表中添加一个名为“付款类型”的列。

以下是我迄今为止的迁移:

def change
  add_column :orders, :payment_type, :string
end

我希望payment_type保持当前在数据库中的所有记录的值“正常”。然而,不是为了将来的记录。我希望未来的记录没有默认值。我该怎么做呢?

共有3个答案

叶富
2023-03-14
def change
  add_column :orders, :payment_type, :string
  Order.all.each do |order|
    order.update_attributes(:payment_type => 'normal')
  end
end
龙焱
2023-03-14

我认为最简单的方法是:

  class AddStateToSites < ActiveRecord::Migration[5.1]
      def up
        add_column :sites, :state, :string, default: :complete # sets default value for existed records
        change_column :sites, :state, :string, default: nil # changes default value for next
      end

      def down
        remove_column :sites, :state
      end
    end

之后检查它在控制台:

>> Site.last.state
  Site Load (0.6ms)  SELECT  "sites".* FROM "sites" ORDER BY "sites"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> "complete"
>> Site.new.state
=> nil
伏星汉
2023-03-14

由于您只想为所有现有记录设置值,您可以使用update_all,这比循环遍历所有订单实例要快得多,因为它只使用数据库语句,而不实例化所有订单:

class Order < ActiveRecord::Base
end

def up
  add_column :orders, :payment_type, :string
  Order.reset_column_information
  Order.update_all(payment_type: 'normal')
end

def down
  remove_column :orders, :payment_type
end

update\u all不调用任何验证或触发器。

 类似资料:
  • 问题内容: 我不知道如何使用Laravel框架向现有数据库表添加新列。 我试图使用…来编辑迁移文件。 在终端中,我执行和。 如何添加新列? 问题答案: 要创建迁移,您可以在Artisan CLI上使用migration:make命令。使用特定名称以避免与现有模型冲突 对于Laravel 3: 对于Laravel 5+: 然后,您需要使用该方法(在访问现有表而不是创建新表时)。您可以添加如下所示的列

  • 我有一个工作的Java项目,它使用Access.accdb数据库存储数据。我正在为我的程序进行更新,为用户提供更多的功能。为了使其工作,我需要在现有的表中添加一个列,该列填充了数据。当我研究时,我发现UCanAccess不能支持 这是不幸的,但我明白,由于低级别的驱动程序不支持它,UCanAccess也不能支持它。 然后我找到了这个解决办法: 如何使用UCanAccess修改表 但这对我也不起作用

  • 我不知道如何使用Laravel框架将新列添加到现有的数据库表中。 我试图使用…编辑迁移文件。。。 在终端,我执行和。 如何添加新列?

  • 我想在表的第二列中追加 。输出应为 我不想使用,因为我需要在我的实际问题中追加嵌套的div。我制作了同样的小示例。JsFiddle

  • 本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。

  • 我正在表任务中添加新列名标题。但我得到一个错误,该表中不存在此列。谁能帮我解决那个错误。这是我的密码: 然后添加此代码 到创建的新表文件