Postrgresql ищет неправильную таблицу «многие ко многим» с помощью Rails 3 - PullRequest
3 голосов
/ 27 мая 2011

** ОБНОВЛЕНИЕ: Я нашел это:

"Active Record ожидает, что промежуточные таблицы имен будут названы с объединением таблиц, к которым они присоединяются, в алфавитном порядке."

Sigh ... **

У меня есть 3 модели: изображения, видео и ключевые слова.Изображения и видео выглядят в основном одинаково, и я пытаюсь сделать для них все то же самое в отношении ключевых слов.Но добавление ключевого слова к изображению работает нормально, в то время как добавление ключевого слова в видео - нет.

keyword.rb

has_and_belongs_to_many :cases
has_and_belongs_to_many :images
has_and_belongs_to_many :videos

video.rb

has_and_belongs_to_many :keywords

image.rb

has_and_belongs_to_many :keywords

schema.rb

create_table "images_keywords", :id => false, :force => true do |t|
  t.integer  "image_id"
  t.integer  "keyword_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "videos_keywords", :id => false, :force => true do |t|
  t.integer  "video_id"
  t.integer  "keyword_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Это работает:

images_controller.rb

@image.keywords << Keyword.new(:word => "test")

Это:

videos_controller.rb

@video.keywords << Keyword.new(:word => "test")

Дает мне эту ошибку:

ActiveRecord::StatementInvalid in VideosController#create

PGError: ERROR:  relation "keywords_videos" does not exist
LINE 4:              WHERE a.attrelid = '"keywords_videos"'::regclas...
                                    ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc,      a.attnotnull
          FROM pg_attribute a LEFT JOIN pg_attrdef d
            ON a.attrelid = d.adrelid AND a.attnum = d.adnum
         WHERE a.attrelid = '"keywords_videos"'::regclass
           AND a.attnum > 0 AND NOT a.attisdropped
         ORDER BY a.attnum

Когда я проверяю консоль на предмет добавления ключевого слова к изображению, она правильно ищет "images_keywords" Почемуон ищет "ключевые слова_видео" для видео ???

Чем они отличаются?

1 Ответ

4 голосов
/ 27 мая 2011

При использовании has_and_belongs_to_many в имени таблицы объединения должны быть перечислены связанные модели в алфавитном порядке, то есть: keywords_videos не videos_keywords.

...