2012-04-30 28 views
5

Tôi có hai kiểu: Hiển thị và Giao dịch.Tên cột trống trong khi tiêu diệt đối tượng

class Show < ActiveRecord::Base 
    has_many :deals, :inverse_of => :show, :dependent => :destroy 
    ... 

class Deal < ActiveRecord::Base 
    belongs_to :show, :inverse_of => :deals 
    ... 

Khi tôi cố gắng để tiêu diệt Hiện tôi nhận được lỗi này:

PG::Error: ERROR: zero-length delimited identifier at or near """" 
LINE 1: DELETE FROM "deals" WHERE "deals"."" = $1 

Tại sao là tên cột trống rỗng? Trong schema.rb:

create_table "deals", :id => false, :force => true do |t| 
    t.integer "discount_id" 
    t.integer "show_id" 
end 

create_table "shows", :force => true do |t| 
    t.integer "movie_id" 
    t.integer "hall_id" 
    t.datetime "show_time" 
    t.integer "city_id" 
    t.integer "price" 
end 

chìa khóa ngoại được bổ sung vào cơ sở dữ liệu

CONSTRAINT fk_deals_shows FOREIGN KEY (show_id) 
    REFERENCES shows (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION 

T.B. Tôi đã giải quyết vấn đề này bằng cách thêm khóa chính vào bảng thỏa thuận, nhưng tôi không thực sự cần nó ở đó. Vì vậy, câu hỏi vẫn còn thực tế. Tôi có thể sử dụng phụ thuộc với các mô hình không có khóa chính id không?

Trả lời

3

Theo compositekeys ray không hỗ trợ các khóa chính kết hợp (đó là trường hợp của bạn). Vì vậy, một trong các giải pháp là sử dụng has_and_belongs_to_many vì bảng của bạn có vẻ giống như bảng nhiều người.

Giải pháp khác là sử dụng đá quý nằm trên liên kết ở trên.

0

Tôi lưu ý bảo nó giải quyết vấn đề của bạn, nhưng theo https://github.com/rails/rails/commit/ccea98389abbf150b886c9f964b1def47f00f237 bạn cần phải thiết lập các param :inverse_of có giá trị đặc biệt:

belongs_to :show, :inverse_of => :deal 

Tôi hy vọng nó giúp

+0

trong ví dụ của bạn mối quan hệ giữa các thực thể là một-một, nhưng trong trường hợp của tôi nó là một-nhiều, do đó, 'giao dịch' là đúng – Donotello

Các vấn đề liên quan