ruby-on-rails - rails迁移设置布尔字段不起作用
问题描述
我有一个迁移,它添加了一个布尔列并为某些行设置了值。保存模型时,新值不会保存到数据库中。这是代码的简化版本:
class AddSmartToStudent
def change
add_column :students, :smart, :boolean
Student.where(grade: 'A').each do |student|
student.smart = true
student.save!
end
end
end
提前致谢!
解决方案
在您的迁移中,您添加一个布尔列,然后在模型中使用它。不确定是否可能 - 当迁移尚未结束但事务尚未提交时。该Student
模型可能还没有smart
字段。
正如 Luis Silva 建议的那样,您可以使用reset_column_information
方法来刷新有关Student
. 但问题是迁移不是为了处理数据。如果要更改某些数据,最好在rake
任务中进行。
如果由于某种原因您必须在迁移中执行此操作,您可以在纯 SQL 查询中执行此操作。对于 PostgreSQL,它将是:
execute "UPDATE students SET smart='t' WHERE grade='A'"
推荐阅读
- postgresql - Postgres 9.6在存在并行工作者时在聚合后收集节点完成
- javascript - 在手机上按住按钮时如何防止附近的文本选择?
- python - 在 Django 中访问多级 json 数据
- python - 如何修复 ValueError:使用回调保存权重后加载权重时轴与数组不匹配。ModelCheckpoint
- c - 如何使用 cat 命令将文件解析为参数
- amazon-web-services - 为 aws lambda 提供创建和删除警报所需的权限
- linux - 如何获取任何命令/任务(例如:Ansible - Yum Install)/stdout 输出,即漂亮的打印或美化/Lint 对齐输出
- java - Swagger Springfox - 如何为查询参数列表生成模式类型数组
- python - 在python中按“x”数量删除消息的不和谐机器人
- excel - 如何在excel中将单元格的文本内容引用为单独的值