首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sequel创建记录时,'Sequel::Error: id是受限制的主键‘

使用Sequel创建记录时,'Sequel::Error: id是受限制的主键‘
EN

Stack Overflow用户
提问于 2012-02-15 19:47:48
回答 2查看 4.2K关注 0票数 6

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

代码语言:javascript
复制
class Operation < Sequel::Model(DB[:operations]) 
end

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

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 04:15:25

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

代码语言:javascript
复制
class Operation
  def before_create
    values[:id] ||= :nextval.qualify(:Soperations)
    super
  end
end 
票数 7
EN

Stack Overflow用户

发布于 2016-09-13 18:23:56

要简单地使用所需的id创建new实例,您可以:

代码语言:javascript
复制
Operation.new(attrs).tap { |o| o.id = id }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9292789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档