一个连接表的字段我有三个表:过滤器使用JSONAPI资源
- 观察
- 子目录
- 类别
结构如下:
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
我希望能够过滤JSONAPI::Resource
根据category_id
class ObservationResource < JSONAPI::Resource
attributes :name, :subcategory_id
filter :subcategory_id, :test
filter :test, apply: ->(records, value, _options) {
records.where('subcategories.category_id = ?', value[0])
}
end
如果我尝试做请求的意见:
/observations?include=subcategory,subcategory.category&filter[subcategory.category_id]=1
我得到:
subcategory.category_id不允许
如果我尝试执行请求:
/observations?include=subcategory,subcategory.category&filter[test]=1
我在尝试执行时从Postgres的未来异常:。
SQL(6.4ms)SELECT DISTINCT “观察”, “ID”, “观察”, “ID” AS ALIAS_0 FROM“observations”LEFT OUTER JOIN “observation_translations”ON “observation_translations”。“observation_id”=“views”。“id” WHERE(subcategories.category_id ='1')ORDER BY“observations”。“id” ASC限额$ 1 OFFSET $ 2 [[“LIMIT”,1000],[“OFFSET”,0]]
因为没有桌子上subcategories
参加如果我添加一个默认范围包括subcategories
所有查询的工作很好,但最后一个出现故障,试图对记录进行计数时:
SELECT COUNT(*) FROM "observations" WHERE (subcategories.category_id = '1')
我该如何正确地做到这一点?