2012-02-15 24 views
6

創造紀錄時,我有一個基於續集和Oracle適配器型號:「續集::錯誤:ID是一個受限制的主鍵」使用續集

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

如果我嘗試創建使用Oracle的序列記錄。 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

回答

7

unrestrict_primary_key將允許您將質量分配給主鍵字段。但是,這可能不是你想要在這種情況下做的,除非你還想關閉類型轉換。既然你只是想設置一個創造價值,我建議使用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 }