删除使用 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 约定命名它。它加入 Participant
和 Group
模型(使用 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
我有一个连接 table,我没有使用传统的 Rails 约定命名它。它加入 Participant
和 Group
模型(使用 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