2012-02-15 24 views
6

Tengo un modelo basado en la secuela y adaptador de Oracle:'Sequel :: Error: ID es una clave primaria restringida' al crear registro usando Sequel

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

Si trato de crear un registro utilizando la secuencia de Oracle. nextval como clave principal:

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

tengo error: Sequel::Error: id is a restricted primary key. ¿Cuál es la forma correcta de crear un registro en tal caso o "mapear" la secuencia de Oracle a la columna id? O tal vez, tengo que usar unrestrict_primary_key?

Respuesta

7

unrestrict_primary_key le permitirá asignar masa al campo de clave principal. Sin embargo, probablemente eso no sea lo que desea hacer en este caso, a menos que también desee desactivar el encasillado. Dado que lo que desea es establecer un valor en la creación, recomiendo el uso de before_create:

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

simplemente crear una instancia necesaria new con id puede:

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