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])
}