2012-04-30 7 views
5

У меня есть две модели: Show and Deal.Пустое имя столбца при уничтожении объекта

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

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

Когда я пытаюсь уничтожить Показать я получаю эту ошибку:

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

Почему это имя столбца пусто? В 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 

Внешний ключ добавлен в базу данных

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

P.S. Я решил эту проблему, добавив первичный ключ в таблицу сделок, но мне это действительно не нужно. Поэтому вопрос все еще актуальный. Могу ли я использовать зависимость с моделями без первичного ключа id?

ответ

3

По compositekeys рельсам не поддерживают составные первичные ключи (это ваш случай). Таким образом, одним из решений является использование has_and_belongs_to_many, так как ваша таблица выглядит как таблица «многие-ко-многим».

Другим решением является использование драгоценного камня, который расположен по ссылке выше.

0

Я отметить, что это решает проблему, но в соответствии с https://github.com/rails/rails/commit/ccea98389abbf150b886c9f964b1def47f00f237 вам нужно установить :inverse_of параметров с особой ценности:

belongs_to :show, :inverse_of => :deal 

Я надеюсь, что это помогает

+0

в вашем примере отношение между объектами взаимно однозначно, но в моем случае это одно ко многим, поэтому «сделки» правы – Donotello

Смежные вопросы