2012-02-15 27 views
6

Tôi có một mô hình dựa trên Sequel và Oracle adapter:'Sequel :: Lỗi: id là một khóa chính hạn chế' khi tạo bản ghi sử dụng Sequel

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

Nếu tôi cố gắng tạo ra một kỷ lục sử dụng chuỗi của Oracle. nextval làm khóa chính:

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

Tôi gặp lỗi: Sequel::Error: id is a restricted primary key. Cách chính xác để tạo bản ghi trong trường hợp như vậy hoặc "bản đồ" trình tự của Oracle thành cột id là gì? Hoặc có thể, tôi phải sử dụng unrestrict_primary_key?

Trả lời

7

unrestrict_primary_key sẽ cho phép bạn gán khối lượng cho trường khóa chính. Tuy nhiên, đó có thể không phải là những gì bạn muốn làm trong trường hợp này, trừ khi bạn cũng muốn tắt typecasting. Vì bạn chỉ muốn đặt một giá trị trên tạo ra, tôi khuyên bạn nên sử dụng before_create:

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

Để chỉ cần tạo một trường hợp new với cần id bạn có thể:

Operation.new(attrs).tap { |o| o.id = id } 
Các vấn đề liên quan