2012-02-15 5 views
6

를 사용하여 레코드를 생성 할 때 내가 속편 오라클 어댑터를 기반으로 모델을 가지고있다. 기본 키로 nextval :'속편 : 오류 : ID가 제한된 기본 키'나는 오라클의 시퀀스를 사용 기록을 만들려고하면</p> <pre><code>class Operation < Sequel::Model(DB[:operations]) end </code></pre> <p>속편

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이 있습니다. 그런 경우 레코드를 만들거나 오라클 시퀀스를 id 열로 "매핑"하는 올바른 방법은 무엇입니까? 또는 unrestrict_primary_key을 사용해야합니까?

답변

7

unrestrict_primary_key을 사용하면 기본 키 필드에 대량 할당 할 수 있습니다. 그러나, 당신이 typecasting을 끄고 싶지 않다면, 아마 당신이이 경우에하고 싶은 것이 아닙니다. 방금 생성에 값을 설정하려는 때문에, 내가 before_create를 사용하는 것이 좋습니다 :

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

단지와 new 인스턴스를 만드는 데 필요한 id을 수행 할 수 있습니다

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