2013-04-01 37 views
4

我只是使用ActiveRecord來進行一些使用舊版Oracle數據庫的開發。我的適配器是activerecord-oracle_enhanced-adapter(https://github.com/rsim/oracle-enhanced)。所以我不想讓AR處理主鍵生成。如何禁用序列生成的主鍵?如何禁用沒有導軌的activerecord-oracle_enhanced-adapter中的序列?

class User < Activied::Base 
    self.table_name = "users" 
    self.primary_key = "user_id" 
end 

user = User.new 
user.save 

然後我得到了錯誤:

stmt.c:230:in oci8lib_191.so: ORA-02289: sequence does not exist (OCIError) 

當我我的代碼更改爲

class User < ActiveRecord::Base 
    self.table_name = 'users' 
    self.primary_key = "user_id" 
    self.sequence_name = nil 
end 

我得到另一個錯誤:

stmt.c:230:in oci8lib_191.so: ORA-00936: missing expression (OCIError) 

那麼,有沒有人知道如何手動管理主鍵?我只想做一些簡單的插入。

謝謝

+0

怎樣解決這個問題? –

+0

@SergeyChechaev我做了:) –

回答

2

也許這是爲時已晚,但最終我找到答案。不久:

self.sequence_name = :autogenerated 

從源代碼註釋here

Usage notes:

# * Key generation assumes a "${table_name}_seq" sequence is available 
# for all tables; the sequence name can be changed using 
# ActiveRecord::Base.set_sequence_name. When using Migrations, these 
# sequences are created automatically. 

# ***Use set_sequence_name :autogenerated **** with legacy tables that have 
# triggers that populate primary keys automatically.**