首页 > 解决方案 > Ransack:Rails 6 > PG::UndefinedTable: 错误定义了自定义外键

问题描述

我有2个模型。让我们说

  1. 模型A
  2. 模型B

它们之间的关系如下

class ModelA < ApplicationRecord
  belongs_to :distributor, class_name: 'ModelB', foreign_key: 'distributor_id'
  belongs_to :asset_manager, class_name: 'ModelB', foreign_key: 'asset_manager_id'
end
class ModelB < ApplicationRecord
end

ModelB 有一个名为“name”的属性,我想从 ModelA 对其执行搜索

所以当我执行这个查询时:

ModelA.ransack(distributor_name_or_asset_manager_name_cont: "some name")

它抛出以下错误

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "asset_managers_model_A"

它尝试在数据库中触发以下查询

model_B.name ILIKE "some name" OR asset_managers_model_A.name ILIKE "some name"

那么,我在这里做错了什么吗?

标签: ruby-on-railsactiverecordruby-on-rails-6ransack

解决方案


在查看了ransack gem open issues 之后,我发现这已经被报告了。我正面临 Rails 6.0.2 和 Ransack 版本 2.4.0 的问题

将我的 rails 版本升级到 6.1.0(最新版本)后,一切正常。

以下是 Ransack gem git hub repo 中打开问题的链接

  1. https://github.com/activerecord-hackery/ransack/issues/1119
  2. https://github.com/activerecord-hackery/ransack/issues/1144
  3. https://github.com/activerecord-hackery/ransack/issues/1182

推荐阅读