Ruby on rails 与双深度关联模型的计数属性相结合存在_的Rails
我有一个Ruby on rails 与双深度关联模型的计数属性相结合存在_的Rails,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个Filter对象,它有许多与之关联的relevancelabel。相关标签属于文章 我试图做一个丑陋的查询:我想找到所有过滤器,它们至少有10个相关标签,其中每个相关标签的文章没有零标记向量 我目前正在使用where_existsgem,这使第一部分变得简单: streams\u with\u labels=Filter.where\u存在(:相关性\u labels) 但我仍然在循环中使用丑陋: stream=Filter.find(Filter\u id) labels=stream
Filter
对象,它有许多与之关联的relevancelabel
。相关标签
属于文章
我试图做一个丑陋的查询:我想找到所有过滤器,它们至少有10个相关标签
,其中每个相关标签
的文章
没有零
标记向量
我目前正在使用where_exists
gem,这使第一部分变得简单:
streams\u with\u labels=Filter.where\u存在(:相关性\u labels)
但我仍然在循环中使用丑陋:
stream=Filter.find(Filter\u id)
labels=stream.relevance\u标签
如果标签长度<10,则返回
labels_with_tokens=labels.reject{| label | label.article.token_vector.nil}
如果标签_带有_标记,则返回。长度<10
...
我确信有一些链接正在逃离我,但我甚至不确定从何处开始。您可能想在这里做的是围绕过滤器进行分组。id
并添加一个子句为每个组添加一个条件:
class Filter < ApplicationRecord
has_many :relevance_labels
has_many :articles, through: :relevance_labels
def self.with_articles(n = 10)
joins(:articles)
.group(:id) # filters.id
.where.not(articles: { token_vector: nil })
.having(
Article.arel_table[Arel.star].count.gte(n)
)
end
end
类过滤器
Article.arel\u table[arel.star].count.gte(n)
是一种更方便的编写的方法,它拥有(“count(articles.*>=?”,?)
您可能想在这里做的只是分组过滤器.id
,并添加一个子句来为每个组添加一个条件:
class Filter < ApplicationRecord
has_many :relevance_labels
has_many :articles, through: :relevance_labels
def self.with_articles(n = 10)
joins(:articles)
.group(:id) # filters.id
.where.not(articles: { token_vector: nil })
.having(
Article.arel_table[Arel.star].count.gte(n)
)
end
end
类过滤器
Article.arel\u表[arel.star].count.gte(n)
是一种更方便的书写的方法,它拥有(“count(articles.*>=?”,?)