«Sequel :: Error: id является ограниченным первичным ключом» при создании записи с использованием Sequel - PullRequest
6 голосов
/ 15 февраля 2012

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

Ответы [ 2 ]

7 голосов
/ 16 февраля 2012

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

class Operation
  def before_create
    values[:id] ||= :nextval.qualify(:Soperations)
    super
  end
end 
2 голосов
/ 13 сентября 2016

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

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