I创建了一个迁移,可以进行两个默认值更新。看起来像这样: ChangetablenameDefaultValues class changetablenedEfaultValues

问题描述 投票:0回答:1
我的linter建议我用一个

change_table bulk: true

语句包装,所以我尝试了这样的方法:
class ChangeTableNameDefaultValues < ActiveRecord::Migration[7.2]
  def change
    change_table :table_name, bulk: true do |t|
      # Notice here that I don't use the t variable being passed
      # to the block. I'm wondering if I need to call a method on t?
      change_column_default(:table_name, :column_1, from: 'old_default_value', to: 'new_default_value')
      change_column_default(:table_name, :column_2, from: 'old_default_value', to: 'new_default_value')
    end
  end
end

,但是,在运行迁移后,我得到了以下输出:

Migrating to ChangeTableNameDefaultValues (20250221054551) == 20250221054551 ChangeTableNameDefaultValues: migrating ====================== -- change_table(:table_name, {:bulk=>true}) -- change_column_default(:table_name, :column_1, {:from=>"old_default_value", :to=>"new_default_value"}) TRANSACTION (0.0ms) BEGIN (2.4ms) ALTER TABLE "table_name" ALTER COLUMN "column_1" SET DEFAULT 'new_default_value' -> 0.0046s -- change_column_default(:table_name, :column_2, {:from=>"old_default_value", :to=>"new_default_value"}) (0.5ms) ALTER TABLE "table_name" ALTER COLUMN "column_2" SET DEFAULT 'new_default_value' -> 0.0017s -> 0.0072s == 20250221054551 ChangeTableNameDefaultValues: migrated (0.0072s) =============
因此,它没有利用散装表更新。我想知道是否可以通过更改列的默认值?

问题是您需要使用

change_default

而不是
ruby-on-rails database-migration
1个回答
0
投票
.

change_default
使用表中表的上下文,而
change_table

则将表作为显式参数并做出自己的语句。

,类似...

change_column_default
注意这不是可逆的。
change_table中可用的方法列表为
here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.