«Sequel::Error: id является ограниченным первичным ключом» при создании записи с использованием Sequel

У меня есть модель на основе адаптера 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?


person Maksim Kachalin    schedule 15.02.2012    source источник


Ответы (2)


unrestrict_primary_key позволит вам массово назначать поле первичного ключа. Однако, вероятно, это не то, что вы хотите сделать в данном случае, если вы также не хотите отключить приведение типов. Поскольку вы просто хотите установить значение при создании, я рекомендую использовать before_create:

class Operation
  def before_create
    values[:id] ||= :nextval.qualify(:Soperations)
    super
  end
end 
person Jeremy Evans    schedule 15.02.2012

Чтобы просто создать экземпляр new с необходимыми id, вы можете:

Operation.new(attrs).tap { |o| o.id = id }
person cema-sp    schedule 13.09.2016