【发布时间】:2011-12-15 07:45:25
【问题描述】:
我们的系统中有一个布尔字段(使用 Rails 3.0.4),当附加到 MySQL 时,字段会根据需要报告 true 和 false。当附加到 Oracle(生产)时,它返回 Fixnum。该列的类型为 NUMBER(1)。其他模型正确返回 true 和 false。控制器正在做一个简单的查找。这只发生在表演动作上。索引返回真假。 HTML 和 XML 响应都会发生这种情况。当询问字段的类型时,控制台会报告 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 动作是由脚手架创建的,因此非常通用。为什么 Rails 在这一实例中不遵循约定?
已更新解决方案
在这个实例中通过调用 Person.find_by_id!(params[:id]) 而不是 Person.find(params[:id]) 来修复它为什么默认在正常查找中为字段返回错误的类是超越我。
【问题讨论】:
-
向我们展示您的模型代码和 schema.rb 文件
-
这个我不确定,但是我认为Rails默认不支持Oracle?你用的是什么适配器?
-
OracleAdapter。绝对支持 Oracle。不太好,但支持。
-
具体来说:activerecord-oracle_enhanced-adapter 和 ruby-oci8
标签: ruby-on-rails oracle activerecord