更改DB中的默认布尔值

时间:2014-04-18 13:04:43

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

我的DB(.sqlite3)中有布尔列。它可能是't'或'f'。

t.boolean :disable_product_category

如何将值更改为1或0?

修改 我找到了Rails 3 SQLite3 Boolean false

我编辑 active_record / connection_adapters / abstract / quoting.rb

if column && column.type == :integer
  value ? 1 : 0
else
  value ? 't' : 'f'
end

将't'和'f'替换为1和0之后,所有工作都按我要求进行。

这是正常的解决方案吗?我想用这个:

# config/initializers/sqlite3_adapter_patch.rb

module ActiveRecord
  module ConnectionAdapters
    class SQLite3Adapter < AbstractAdapter
      QUOTED_TRUE, QUOTED_FALSE = "'t'", "'f'"

      def quoted_true
        QUOTED_TRUE
      end

      def quoted_false
        QUOTED_FALSE
      end
    end
  end
end

但它不起作用:(。是否需要以某种方式更新应用程序?

2 个答案:

答案 0 :(得分:0)

布尔值可能具有&#39; t&#39; f&#39; f&#39;,1或0的内部表示,但在您的代码中,您可以将列的值视为普通布尔值

添加default参数以设置列的默认值:

t.boolean :disable_product_category, default: false

答案 1 :(得分:0)

布尔数据类型存储在整数0(假)和1(真)中。正如您所提到的,disable_product_categorytf的形式出现,您应该将这些文字转换为适当的布尔值,以便将正确的值写入数据库。

要实现此目的,您可以覆盖disable_product_category的设置者并进行适当的翻译,例如

class Foo < ActiveRecord::Base

  def disable_product_category=(value)
    value = true if value == 't'
    value = false if value == 'f' 
    super(value)
  end
end