6

我有一个基于 Sequel 和 Oracle 适配器的模型:

class Operation < Sequel::Model(DB[:operations]) 
end

如果我尝试使用 Oracle 的 sequence.nextval 作为主键创建记录:

Operation.create(
  :id=>:nextval.qualify(:Soperations), 
  :payee_id=>12345,
  :type=>"operation",
  :origin=>"user-12345",
  :parameters=>{}.to_s
)

我有错误:Sequel::Error: id is a restricted primary key。在这种情况下创建记录或将 Oracle 的序列“映射”到id列的正确方法是什么?或者,我必须使用unrestrict_primary_key

4

2 回答 2

7

unrestrict_primary_key将允许您批量分配给主键字段。但是,在这种情况下,这可能不是您想要做的,除非您还想关闭类型转换。由于您只想在创建时设置一个值,我建议使用 before_create:

class Operation
  def before_create
    values[:id] ||= :nextval.qualify(:Soperations)
    super
  end
end 
于 2012-02-15T20:15:25.153 回答
3

要简单地创建一个new需要的实例,id您可以:

Operation.new(attrs).tap { |o| o.id = id }
于 2016-09-13T10:23:55.780 回答