6

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 keyidこのような場合にレコードを作成する、またはOracleのシーケンスを列に「マップ」する正しい方法は何ですか。または多分、私は使用する必要がありますunrestrict_primary_keyか?

4

2 に答える 2

7

unrestrict_primary_key主キー フィールドに一括割り当てできるようになります。ただし、型キャストもオフにしたい場合を除き、この場合はおそらくそれを行いたくないでしょう。作成時に値を設定したいだけなので、before_create を使用することをお勧めします。

class Operation
  def before_create
    values[:id] ||= :nextval.qualify(:Soperations)
    super
  end
end 
于 2012-02-15T20:15:25.153 に答える
3

new必要なインスタンスを簡単に作成するには、次のidことができます。

Operation.new(attrs).tap { |o| o.id = id }
于 2016-09-13T10:23:55.780 に答える