Rails迁移默认0不是假的?

时间:2015-12-29 11:23:44

标签: mysql ruby-on-rails ruby-on-rails-4

在迁移文件中我有:

class AddEnabledToJob < ActiveRecord::Migration
  def change
    add_column :jobs, :enabled, :boolean, default: 0
  end
end

但是在我看来,我正在寻找每个:enabled => false对象:

<% @jobs.where(enabled: false).order("id DESC").each do |job| %>

这不起作用。如果我将其更改为:

,它会起作用
<% @jobs.where(enabled: 0).order("id DESC").each do |job| %>

这是令人困惑的,因为我在我的应用程序中的其他位置将enabled值更改为false所以我有一些Job对象enabled: false而有些enabled: 0 。我怎样才能纠正这个问题?为什么会这样?

修改

为了扩展这个问题,我已经通过控制台填充了所有作业(Job.all),我发现使用default: 0创建新记录时,它们的值为false 。那么为什么@jobs.where(enabled: false)无法检索它们呢?

1 个答案:

答案 0 :(得分:1)

使用change_column_default将默认值更改为false,并在允许旧记录的每个0为false之后:

def up
  change_column_default :jobs, :enabled, false
  Job.where(enabled: 0).update_all(enabled: false)
end

def down
  change_column_default :jobs, :enabled, 0
end