Chr*_*ris 5 ruby oracle activerecord
我仅使用 ActiveRecord 进行一些旧 Oracle 数据库的开发。我的适配器是 activerecord-oracle_enhanced-adapter ( https://github.com/rsim/oracle-enhanced )。所以我不想让 AR 处理主键生成。如何禁用序列生成的主键?
class User < Activied::Base
self.table_name = "users"
self.primary_key = "user_id"
end
user = User.new
user.save
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误:
stmt.c:230:in oci8lib_191.so: ORA-02289: sequence does not exist (OCIError)
Run Code Online (Sandbox Code Playgroud)
当我将代码更改为
class User < ActiveRecord::Base
self.table_name = 'users'
self.primary_key = "user_id"
self.sequence_name = nil
end
Run Code Online (Sandbox Code Playgroud)
我收到另一个错误:
stmt.c:230:in oci8lib_191.so: ORA-00936: missing expression (OCIError)
Run Code Online (Sandbox Code Playgroud)
那么有人知道如何手动管理主键吗?我只想做一些简单的插入。
谢谢
也许为时已晚,但我终于找到了答案。不久:
self.sequence_name = :autogenerated
Run Code Online (Sandbox Code Playgroud)
从这里的源代码注释:
使用注意事项:
Run Code Online (Sandbox Code Playgroud)# * 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.**