2011-10-25 18 views
1

我们的系统中有一个布尔型字段(使用Rails 3.0.4),当连接到MySQL时,字段会根据情况报告true和false。当连接到Oracle(生产)时,它将返回Fixnum。该列的类型为NUMBER(1)。其他模型正确返回true和false。控制器正在做一个简单的查找。这只发生在演出中。索引返回true false。这发生在HTML和XML响应中。当询问字段的类型时,控制台报告一类FalseClass或TrueClass。该视图报告Fixnum。Rails:为什么我的布尔字段返回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约定是使该领域的编号(1)型柱更新。然后将其转换为模型中的布尔值。这在我们的应用程序的几个模型中工作。只有一个模型有这个问题。而且它只在演出中有问题。展会行动是由脚手架创建的,因此非常通用。为什么Rails在这个例子中不遵循约定?

更新与解决方案

它是通过调用Person.find_by_id固定在此情况下(PARAMS [:编号])!而不是Person.find的(PARAMS [:编号])为什么默认是在正常发现中返回一个错误的类是不可能的。

+0

向我们展示您的模型代码和schema.rb文件 – Gareth

+0

我不确定这一点,但我认为Rails默认不支持Oracle?您使用的适配器是什么? –

+0

OracleAdapter。 Oracle绝对支持。不是很好,但它被支持。 – Sixty4Bit

回答

0

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

+0

这与表单没有任何关系。这一切都适当运作。这个问题与展会行动有关。由于某种原因,Rails决定这个模型上的这个字段不是布尔值。 – Sixty4Bit

0

Oracle中没有BOOLEAN类型。我们通常使用CHAR(1)的字段,将其约束为值“Y”和“N”。因人而异。

分享和享受。

+0

Rails惯例是使该字段成为NUMBER(1)类型列。然后将其转换为模型中的布尔值。这在我们的应用程序的几个模型中工作。只有一个模型有这个问题。而且它只在演出中有问题。展会行动是由脚手架创建的,因此非常通用。为什么Rails在这个例子中不遵循约定? – Sixty4Bit