Ruby on rails 使用JSONAPI资源按联接表的字段进行筛选

Ruby on rails 使用JSONAPI资源按联接表的字段进行筛选,ruby-on-rails,activerecord,jsonapi-resources,Ruby On Rails,Activerecord,Jsonapi Resources,我有三张桌子: 观察 子类别 类别 结构如下: class Observation < ApplicationRecord translates :name belongs_to :subcategory end class Subcategory < ApplicationRecord belongs_to :category has_many :observations end class Category < ApplicationRecord h

我有三张桌子:

  • 观察
  • 子类别
  • 类别
  • 结构如下:

    class Observation < ApplicationRecord
      translates :name
      belongs_to :subcategory
    end
    
    class Subcategory < ApplicationRecord
      belongs_to :category
      has_many :observations
    end
    
    class Category < ApplicationRecord
      has_many :subcategories
    end
    
    如果我尝试执行请求:

    /observations?include=subcategory,subcategory.category&filter[subcategory.category_id]=1
    
    /observations?include=subcategory,subcategory.category&filter[test]=1
    
    我得到:

    不允许使用subcategory.category\u id

    如果我尝试执行请求:

    /observations?include=subcategory,subcategory.category&filter[subcategory.category_id]=1
    
    /observations?include=subcategory,subcategory.category&filter[test]=1
    
    我在尝试执行时收到来自Postgres的异常:

    SQL(6.4ms)选择不同的“观察值”。“id”,“观察值”。“id” 作为别名_0从“观测”左外连接 “观察与翻译” “观察翻译”。“观察id”=“观察”。“id” 其中(subcategories.categories_id='1')按“观察”排序 ASC限额$1抵销$2[[“限额”,1000],“抵销”,0]]

    因为表
    子类别上没有联接

    如果我添加一个默认范围以包括
    子类别
    ,则所有查询都可以正常工作,但最后一个查询在尝试计数记录时失败:

    SELECT COUNT(*) FROM "observations" WHERE (subcategories.category_id = '1')
    

    如何正确地执行此操作?

    好的,解决方案是使用“连接”:

    filter :test, apply: ->(records, value, _options) {
      records.joins(:subcategory).where('subcategories.category_id = ?', value[0])
    }