ruby-on-rails - 通过比较 Rails 5 中现有列的值来添加新列
问题描述
我有一个模型,它的列its_holiday
是数据库中的一个boolean
字段。现在我想添加另一列its_not_a_holiday
,其值与该its_holiday
列的值相反。如何将此新列添加到现有表并使用与its_holiday
列相反的值填充它?
解决方案
如果您的老板坚持使用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
推荐阅读
- javascript - ScriptManager 不调用 Javascript 函数
- logging - 用 log2j4 显示异常的 toString 的内容
- google-cloud-platform - Google Cloud VPN 隧道:请求包含无效参数:“未定义”。错误代码:“未定义”
- jquery - 关闭标签后图像 src 得到更新
- swift - 为什么 Swift 不认为协议采用者属性是一致的?
- ruby-on-rails - Rails 5.2 数据表不会在页面更改时刷新数据
- java - 从 glTexImage2D() 分配后如何编辑纹理的像素颜色
- r - 是否可以在使用 choroplethr 制作的地图上添加城市叠加层?
- vba - VBA产生相同的页面“x”次
- r - 使用 visreg 和 ggplot 按组更改颜色