首页 > 解决方案 > 通过比较 Rails 5 中现有列的值来添加新列

问题描述

我有一个模型,它的列its_holiday是数据库中的一个boolean字段。现在我想添加另一列its_not_a_holiday,其值与该its_holiday列的值相反。如何将此新列添加到现有表并使用与its_holiday列相反的值填充它?

标签: ruby-on-railsruby-on-rails-5

解决方案


如果您的老板坚持使用its_not_holiday布尔值(尽管其他答案和评论指出,您实际上并不需要这样做),您可以按如下方式进行迁移......

创建迁移

rails g migration AddItsNotAHolidayToMyModel its_not_a_holiday:boolean

编辑迁移如下

class AddItsNotAHolidayToMyModel < ActiveRecord::Migration[5.1] # or whatever version you have
  def up
    add_column :my_model, :its_not_a_holiday, :boolean, default: false
    MyModel.where(its_holiday: [false, nil]).update_all(its_not_a_holiday: true)
  end
  def down
    remove_column :my_model, :its_not_a_holiday
  end
end

您可能需要修改模型以确保在保存记录时始终正确设置布尔值

class MyModel
  before_save :update_its_not_a_holiday

  private

  def update_its_not_a_holiday
    self.its_not_a_holiday = !its_holiday
  end
end

推荐阅读