我的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
但它不起作用:(。是否需要以某种方式更新应用程序?
答案 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_category
以t
或f
的形式出现,您应该将这些文字转换为适当的布尔值,以便将正确的值写入数据库。
要实现此目的,您可以覆盖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