Rails 3 SQLite3布尔值false
|
我正在尝试在SQLite3表中插入错误的布尔值,但始终会插入真实值。
这是我的迁移:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.column :name, :string
t.column :active, :boolean, :default => false, :null => false
end
end
def self.down
drop_table :resources
end
end
当我尝试使用Rails插入时,它会产生以下SQL:
INSERT INTO \"users\" (\"name\", \"active\") VALUES (\'test\', \'f\')
SQLite将\'f \'视为true,因此将true插入到我的数据库中。我希望它生成的查询是:
INSERT INTO \"users\" (\"name\", \"active\") VALUES (\'test\', false)
我究竟做错了什么?
导轨:3.0.7
sqlite3 gem:1.3.3
没有找到相关结果
已邀请:
5 个回复
辩谷变充
可能被解释为具有“ true”的真实性,仅因为它不为零。 进行一点点挖掘表明您在Rails 3.0.7 SQLiteAdapter中发现了一个错误。在ѭ4we中,我们发现以下内容:
因此,默认情况下,ActiveRecord假定数据库对布尔列理解
和
。 MySQL适配器重写了它们,以使用boolean列的
实现:
但是SQLite适配器不提供其自己的
或
实现,因此它获得的默认值不适用于SQLite的布尔值。
和
布尔值在PostgreSQL中工作,因此也许每个人都将PostgreSQL与Rails 3一起使用,或者他们只是没有注意到他们的查询工作不正常。 我对此感到有些惊讶,希望有人指出我出了错,您不能成为第一个在Rails中使用SQLite的布尔列的人。 尝试用猴子将
和ѭ15monkey修补到
中(或暂时将它们手动编辑成
),看看您是否获得了明智的SQL。
桔马牛
我不知道如何继续运行此错误?
死搭胯
鞘垒飘
设置行为(默认值为
)。
芭隘的盘石
常量和ѭ23for是性能,因此ruby不必重新生成这些字符串并在每次调用时进行垃圾回收。