【问题标题】:Rails activerecord is querying the wrong column name in HABTM associationRails activerecord 在 HABTM 关联中查询错误的列名
【发布时间】:2019-09-04 20:29:47
【问题描述】:

我有两个模型,列表和类别,具有多对多关系,并带有一个名为 categories_lists 的连接表。当我尝试获取单个列表所属的所有类别时,出现以下错误:

PG::UndefinedColumn: 错误:列 categories_lists.category_id 不存在 LINE 1: ...ER JOIN "categories_lists" ON "categories"."id" = "categorie... ^ 提示:也许您的意思是引用列“categories_lists.categories_id”...

查看:

<ul>
  <% @categories.each do |cat| %>
  <li><%= cat.title %></li>
  <% end %>
</ul>

控制器:

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 |             |
+---------------+--------+-------------+

它使类别成为单数,而不是按照模型中定义的方式保持复数。我不知道如何纠正这个。

想法?

【问题讨论】:

    标签: ruby-on-rails postgresql model-view-controller many-to-many


    【解决方案1】:

    外键的默认值是单数,你在表中弄错了。

    您可以在表格中将其更改为category_idlist_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
    

    【讨论】:

    • 是的,就是这样。我遵循的教程使用复数表示外键,但现在我当然找不到我使用的教程。我选择在迁移中重命名表列;最好将其作为单独的答案发布,还是将迁移代码放在此处的评论中?
    • 由您决定,迁移代码本身相当简单。
    • 对于以下人员,这里是使答案成为完整解决方案的迁移代码:class ChangeColumnNamesCategoriesLists &lt; ActiveRecord::Migration[5.2] def change rename_column :categories_lists, :categories_id, :category_id rename_column :categories_lists, :lists_id, :list_id end end
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多