2012-04-30 20 views
5

İki modelim var: Göster ve Anlat.Nesneyi yok ederken boş sütun adı

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

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

Ben bu hatayı alıyorum göster yok etmeye çalışırken:

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

Neden sütun adı boş? schema.rb olarak:

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 

Yabancı anahtar veritabanına

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

Not; eklendi Fırsatlar tablosuna birincil anahtar ekleyerek bu sorunu çözdüm, ancak gerçekten buna ihtiyacım yok. Yani soru hala geçerli. Birincil anahtar olmayan modellerle bağımlılığı kullanabilir miyim?

belongs_to :show, :inverse_of => :deal 

Ben desteklemeyen compositekeys raylar göre

cevap

3

yardımcı olur umarım: Ben

0

emin sorunu çözer ama https://github.com/rails/rails/commit/ccea98389abbf150b886c9f964b1def47f00f237 göre sen tekil değerle :inverse_of param ayarlamanız gerekir dikkat Kompozit birincil anahtarlar (sizin durumunuz). Çözümlerden biri, tablonuzun çoktan çoğa bir tabloya benzemesi nedeniyle has_and_belongs_to_many'u kullanmaktır.

Diğer çözüm, yukarıdaki bağlantıda bulunan mücevheri kullanmaktır.

+0

Örneğinizde varlıklar arasındaki ilişki bire birdir, fakat benim durumumda bire çok, yani 'fırsatlar' doğru – Donotello