一個連接表的字段我有三個表:過濾器使用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')
我該如何正確地做到這一點?