删除使用 has_and_belongs_to 关联的记录时如何解决无效语句?

How do I resolve an invalid statement when deleting a record that is associated using has_and_belongs_to association?

我有一个连接 table,我没有使用传统的 Rails 约定命名它。它加入 ParticipantGroup 模型(使用 has_and_belongs_to 关联),通常命名为 groups_participants

我试图破坏 Group 模型中的记录,并收到无效语句错误,"Could not find table 'groups_participants'"

我的连接 table 没有命名为 groups_participants,而是命名为“matchups

是这个问题吗?我需要更改我的加入 table 名称吗?通过阅读几篇文章,您的连接 table 的别名是 acceptable。

这是我加入 table 来自 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”而无法执行此操作。

由于您的加入 table 不遵循 Rails 命名约定,请确保通过指定 join_table 选项来告诉 Rails 正确的名称是什么has_and_belongs_to_many 协会:

has_and_belongs_to_many :participants, join_table: :matchups