我有两个模型,列表和类别,具有多对多关系,有一个名为 categories_lists 的连接表。当我尝试获取单个列表所属的所有类别时,出现以下错误:
PG::UndefinedColumn: ERROR: column categories_lists.category_id does not exist LINE 1: ...ER JOIN "categories_lists" ON "categories"."id" = "categorie... ^ HINT: Perhaps you meant to reference the column "categories_lists.categories_id"...
查看:
<ul>
<% @categories.each do |cat| %>
<li><%= cat.title %></li>
<% end %>
</ul>
Controller :
def show
@categories = List.find(params[:id]).categories.all
end
型号:
class List < ApplicationRecord
has_and_belongs_to_many :categories
end
表格:
describe categories_lists
+---------------+--------+-------------+
| Column | Type | Modifiers |
|---------------+--------+-------------|
| categories_id | bigint | |
| lists_id | bigint | |
+---------------+--------+-------------+
它使类别成为单数,而不是按照其在模型中定义的方式保持复数。我不知道如何纠正这个。
想法?
最佳答案
外键的默认值是单数,你在你的表中弄错了。
您可以在表中将其更改为 category_id
和 list_id
,或者在您的 habtms 中指定非标准 fkeys(同时设置 :foreign_key
和 :association_foreign_key
选项),例如。
has_and_belongs_to_many :categories, association_foreign_key: :categories_id, foreign_key: :lists_id
更新
从 OP,他们使用的迁移:
class ChangeColumnNamesCategoriesLists < ActiveRecord::Migration[5.2]
def change
rename_column :categories_lists, :categories_id, :category_id
rename_column :categories_lists, :lists_id, :list_id
end
end
关于ruby-on-rails - Rails activerecord 正在查询 HABTM 关联中的错误列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795272/