我们的系统中有一个布尔字段(使用Rails 3.0.4),当附加到MySQL时,字段会根据需要报告true和false。当附加到Oracle(生产)时,它返回Fixnum。该列的类型为NUMBER(1)。其他模型正确返回true和false。控制器正在进行简单的查找。这只发生在show动作上。索引返回true false。对于HTML和XML响应都会发生这种情况。在询问字段类型时,Console会报告一类FalseClass或TrueClass。 View报告Fixnum。
可能出现什么问题?
已更新:代码
create_table "people", :force => true do |t|
t.string "name"
t.boolean "has_information"
end
class Person < ActiveRecord::Base
has_many :groups
end
更新了更清晰的问题
Rails约定是使字段成为NUMBER(1)类型列。然后将其转换为模型中的布尔值。这在我们的应用程序中有几个模型。只有一个型号出现此问题。它只有show动作的问题。 show动作是由scaffold创建的,因此非常通用。为什么Rails在这个实例中不遵循约定?
已更新解决方案
在此实例中通过调用Person.find_by_id!(params [:id])而不是Person.find(params [:id])修复了为什么默认为正常查找中的字段返回错误的类是超越我。
答案 0 :(得分:0)
从视图发回的复选框将是一个数字,“0”或“1”,具体取决于是否取消选中或分别选中该复选框。如果这是您的数据库适配器所需的值,则需要在模型中将其转换为false
或true
值。
答案 1 :(得分:0)
Oracle中没有BOOLEAN类型。我们通常使用CHAR(1)字段,约束为值'Y'和'N'。 YMMV。
分享并享受。
答案 2 :(得分:0)
答案是,更新Oracle Adapter,因为它已过期。版本1.3.0的activerecord-oracle_enhanced-adapter gem有一个报告错误:
https://github.com/rsim/oracle-enhanced/issues/7
我们更新了驱动程序,现在一切正常。