Rails: Как мне решить OCIError: ORA-02289: ошибка последовательности не существует? - PullRequest
3 голосов
/ 09 декабря 2011

У меня есть модель под названием «Перевозчик».В моем контроллере, когда я делаю Carrier.create(data), я получаю эту ошибку:

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

Я сделал несколько поисков,и я нашел эти две веб-страницы о решении:

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

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

Где я должен поместить код для ActiveRecord?Должно ли это происходить в моей модели?

Есть ли другое решение моей ошибки?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Я не знаю насчет ruby, но он наверняка был настроен или запрограммирован на использование последовательности базы данных carrier_seq. (Последовательность является своего рода генератором чисел)

Как насчет создания этой последовательности в базе данных? Попробуйте выполнить следующую инструкцию в Oracle SQL * Plus:

create sequence CARRIERS_SEQ;
2 голосов
/ 04 января 2013

Вы также можете указать, какая последовательность должна использоваться командой self.sequence_name.

Пример:

CarriersController < ActionController::Base
  self.sequence_name = 'seq_id'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...