首页 > 解决方案 > 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

提前致谢!

标签: ruby-on-railsrubyactiverecordrails-migrations

解决方案


在您的迁移中,您添加一个布尔列,然后在模型中使用它。不确定是否可能 - 当迁移尚未结束但事务尚未提交时。该Student模型可能还没有smart字段。

正如 Luis Silva 建议的那样,您可以使用reset_column_information方法来刷新有关Student. 但问题是迁移不是为了处理数据。如果要更改某些数据,最好在rake任务中进行。

如果由于某种原因您必须在迁移中执行此操作,您可以在纯 SQL 查询中执行此操作。对于 PostgreSQL,它将是:

execute "UPDATE students SET smart='t' WHERE grade='A'"

推荐阅读