Как разрешить недопустимый оператор при удалении записи, связанной с использованием ассоциации has_and_belongs_to? - PullRequest
0 голосов
/ 30 января 2019

У меня есть таблица соединений, которую я не назвал, используя традиционные соглашения Rails.Он объединяет модели Participant и Group (связанные с использованием has_and_belongs_to) и обычно имеет имя groups_participants.

Я попытался уничтожить запись в модели Group и получил недопустимую ошибку оператора: "Не удалось найти таблицу" groups_participants ""

Моя таблица соединения не названаgroups_participants, а точнее с именем "matchups"

Это проблема?Нужно ли мне менять имя таблицы соединений?Из прочтения нескольких статей можно получить псевдоним для таблицы соединений.

Это моя таблица соединений из schema.rb

     create_table "matchups", id: false, force: :cascade do |t|
t.integer "group_id",       null: false
t.integer "participant_id", null: false
t.index ["group_id", "participant_id"], name: "index_matchups_on_group_id_and_participant_id"
t.index ["participant_id", "group_id"], name: "index_matchups_on_participant_id_and_group_id"
   end

Этот код выделен на моей странице ошибки:

    def table_structure(table_name)
      structure = exec_query("PRAGMA table_info(#{quote_table_name(table_name)})", 'SCHEMA')
      raise(ActiveRecord::StatementInvalid, "Could not find table '#{table_name}'") if structure.empty?
      table_structure_with_collation(table_name, structure)
    end

Попытка удалить запись, существующую вмоей модели Group, которая не смогла найти причину, но не смогла найти 'groups_participants'.

1 Ответ

0 голосов
/ 30 января 2019

Поскольку ваша таблица соединения не соответствует соглашению об именах Rails, обязательно сообщите Rails, какое правильное имя, указав параметр join_table в ассоциации has_and_belongs_to_many:

has_and_belongs_to_many :participants, join_table: :matchups
...