Rails:为什么我的布尔字段返回Fixnum?

时间:2011-10-25 21:38:56

标签: ruby-on-rails oracle activerecord

我们的系统中有一个布尔字段(使用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])修复了为什么默认为正常查找中的字段返回错误的类是超越我。

3 个答案:

答案 0 :(得分:0)

从视图发回的复选框将是一个数字,“0”或“1”,具体取决于是否取消选中或分别选中该复选框。如果这是您的数据库适配器所需的值,则需要在模型中将其转换为falsetrue值。

答案 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

我们更新了驱动程序,现在一切正常。