【问题标题】:'Sequel::Error: id is a restricted primary key' when creating record using Sequel'Sequel::Error: id is a restricted primary key' 使用 Sequel 创建记录时
【发布时间】:2012-02-15 11:47:48
【问题描述】:

我有一个基于 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

【问题讨论】:

    标签: ruby oracle sequel


    【解决方案1】:

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

    class Operation
      def before_create
        values[:id] ||= :nextval.qualify(:Soperations)
        super
      end
    end 
    

    【讨论】:

      【解决方案2】:

      要简单地创建一个带有所需idnew 实例,您可以:

      Operation.new(attrs).tap { |o| o.id = id }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2017-04-19
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 2012-06-10
        相关资源
        最近更新 更多