Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:为什么我的布尔字段返回Fixnum?_Ruby On Rails_Oracle_Activerecord - Fatal编程技术网

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

Ruby on rails Rails:为什么我的布尔字段返回Fixnum?,ruby-on-rails,oracle,activerecord,Ruby On Rails,Oracle,Activerecord,我们的系统中有一个布尔字段(使用Rails 3.0.4),当连接到MySQL时,字段会根据需要报告true和false。当连接到Oracle(生产)时,它将返回Fixnum。该列的类型为编号(1)。其他模型正确地返回true和false。控制器正在执行一个简单的查找。这只发生在表演中。索引返回true和false。HTML和XML响应都会发生这种情况。当询问字段类型时,控制台报告FalseClass或TrueClass类。视图报告Fixnum 可能出了什么问题 更新:代码 create_表“pe

我们的系统中有一个布尔字段(使用Rails 3.0.4),当连接到MySQL时,字段会根据需要报告true和false。当连接到Oracle(生产)时,它将返回Fixnum。该列的类型为编号(1)。其他模型正确地返回true和false。控制器正在执行一个简单的查找。这只发生在表演中。索引返回true和false。HTML和XML响应都会发生这种情况。当询问字段类型时,控制台报告FalseClass或TrueClass类。视图报告Fixnum

可能出了什么问题

更新:代码

create_表“people”,force=>true do|t|
t、 字符串“name”
t、 布尔值“有_信息”
终止
类Person
更新了更清晰的问题


Rails惯例是将字段设置为数字(1)类型的列。然后将其转换为模型中的布尔值。这在我们的应用程序中的几个模型中都起作用。只有一种型号存在此问题。而且它只在表演上有问题。show动作是由scaffold创建的,因此非常通用。为什么Rails在这个例子中不遵循惯例

使用解决方案更新


在本例中,已通过调用Person.find_by_id解决了此问题!(params[:id])而不是Person.find(params[:id])我无法理解为什么默认值为正常查找中的字段返回了错误的类。

从视图返回的复选框将是一个数字,“0”或“1”,具体取决于复选框是未选中还是分别选中。如果DB适配器需要,则需要将模型中的值转换为
false
true
值。

Oracle中没有布尔类型。我们通常使用CHAR(1)字段,这些字段被限制为具有值“Y”和“N”。YMMV


共享和享受。

答案是,更新Oracle适配器,因为它已过时。activerecord-oracle_enhanced-adapter gem的1.3.0版存在报告的错误:


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

显示您的模型代码和schema.rb文件我不确定,但我认为Rails默认不支持Oracle?您使用的适配器是什么?OracleAdapter。甲骨文是绝对受支持的。不太好,但它是受支持的。具体来说:activerecord-oracle\u-enhanced-adapter和ruby-oci8这与表单没有任何关系。这一切都是恰当的。问题在于表演动作。出于某种原因,Rails决定此模型上的此字段不是布尔值。Rails的惯例是将此字段设置为数字(1)类型列。然后将其转换为模型中的布尔值。这在我们的应用程序中的几个模型中都起作用。只有一种型号存在此问题。而且它只在表演上有问题。show动作是由scaffold创建的,因此非常通用。为什么Rails在这个例子中不遵循惯例?
create_table "people", :force => true do |t|
  t.string   "name"
  t.boolean  "has_information"
end

class Person < ActiveRecord::Base
  has_many :groups
end