2011-12-09 21 views
3

我有一個名爲「Carrier」的模型。在我的控制器,當我做了Carrier.create(data),我得到這個錯誤:Rails:如何解決OCIError:ORA-02289:序列不存在錯誤?

OCIError: ORA-02289: sequence does not exist: select carriers_seq.nextval id from dual 

這是我在我的控制器代碼:

class CarriersController < ActionController::Base 
    def index 
     #stuff 
    end 

    def update 
     @params["carriers"].each do |id, data| 
      #data["id"] 
      if Carrier.exists?(data["id"]) 
       carrier = Carrier.find(data["id"]) 
       carrier.update_attributes(data) 
      else 
       Carrier.create(data) 
      end 
     end 
     redirect_to(:action => "index") 
    end 
end 

我做了一些google搜索,我發現這兩個網頁約一個解決方案:

http://niranjansarade.blogspot.com/2011/03/avoid-oracle-sequence-during.html

http://www.dixis.com/?p=127

我應該在哪裏放置ActiveRecord的代碼?它應該在我的模型中進行嗎?

有沒有解決我的錯誤的方法?

回答

3

我不知道紅寶石,但它肯定已被配置或編程爲使用數據庫序列carriers_seq。 (一個序列是一個數字發生器)

如何在數據庫中創建這個序列?嘗試的Oracle SQL執行以下語句*加:

create sequence CARRIERS_SEQ; 
2

您還可以指定哪些序列應通過self.sequence_name命令一起使用。

例子:

CarriersController < ActionController::Base 
    self.sequence_name = 'seq_id' 
end 
+0

如何禁用順序,我不想使用該序列生成我的主鍵。我想自己管理它。 – Chris

相關問題