Ruby on rails Rails:oracle集合\序列\名称被忽略

Ruby on rails Rails:oracle集合\序列\名称被忽略,ruby-on-rails,oracle,activerecord,jruby,Ruby On Rails,Oracle,Activerecord,Jruby,我有一个简单的模型,我必须手动设置数据库名称 另外,因为它使用的是oracle数据库,所以我正在设置序列名称,以便可以使用自动递增的id 当我运行rails控制台并尝试创建我的模型时,它返回并说找不到序列。奇怪的是它找不到的序列不是我在set_sequence_name中设置的序列 模型 class Survey < ActiveRecord::Base set_sequence_name "SURVEY.SQ_SURVEY_ID" set_table_name "SURVEY.S

我有一个简单的模型,我必须手动设置数据库名称

另外,因为它使用的是oracle数据库,所以我正在设置序列名称,以便可以使用自动递增的id

当我运行rails控制台并尝试创建我的模型时,它返回并说找不到序列。奇怪的是它找不到的序列不是我在set_sequence_name中设置的序列

模型

class Survey < ActiveRecord::Base
  set_sequence_name "SURVEY.SQ_SURVEY_ID"
  set_table_name "SURVEY.SURVEYS"
end
看起来它忽略了我的设置序列名称行

我是不是遗漏了什么?

澄清一下,这对oracle 10g有效

据我所知,这是jdbc适配器中的一个bug,请参见此处。对于解决方案,我将使用如下所示的创建前过滤器手动设置id:

class Survey < ActiveRecord::Base
  set_table_name "SURVEY.SURVEYS"

  before_create do
    #since we can't use the normal set sequence name we have to set the primary key manually
    #so the execute command return an array of hashes,
    #so we grab the first one and get the nextval column from it and set it on id
    self.id = ActiveRecord::Base.connection.execute("select SURVEY.SQ_SURVEY_ID.nextval id from dual")[0]["id"]
  end

end
FWIW: 使用11g,我侥幸逃脱:

self.id = ActiveRecord::Base.connection.execute("select SURVEY.SQ_SURVEY_ID.nextval id from dual").fetch
在我的例子中,该序列似乎返回了一个游标,我需要在该游标上执行fetch操作


11g/Rails 3.1。。。。看起来像是一个错误,它可能是ActiveRecordJDBC中的一个错误。对我来说,我需要从execute改为exec_查询,以便返回一个Ruby友好的对象。
self.id = ActiveRecord::Base.connection.execute("select SURVEY.SQ_SURVEY_ID.nextval id from dual").fetch