在实现单表继承的两个 Rails 模型上执行连接



我有三个模型,我们称它们为ProductTemplateProductReadyProduct。 这些表只有一个表,即products表,TemplateProductReadyProduct都继承自Product模型。TemplateProductReadyProduct之间存在has_many/belongs_to关联。 模板用于布置产品的一般特征,Readys 用于自定义产品以及实际可供客户查看的内容。 每个TemplateProduct都有一个id,每个ReadyProduct都有一个与其模板相关的template_product_id

该项目是使用 Rails 5 构建的。

我希望能够做的是收集TemplateProduct的列表,然后获取ReadyProduct关联的每个模板的计数,并以不会锤击数据库的方式进行。 我了解 ActiveRecord 关联,但我的 SQL 很弱,我对连接的理解有限。 我可以用一个简单的Product.where(conditions收集TemplateProduct的列表,但我不知道一旦我有了这个该怎么做。 为了灵活性的考虑,我希望能够基于这个初始集合进行ReadyProduct计数,因为有时我需要额外的计数,有时我不需要。 我确信一定有一个简单的方法来做到这一点,但我还没有找到解决方案。

如果您只需要将TemplateProductid 映射到ReadyProduct计数,那么您所需要的只是:

TemplateProduct.joins(:ready_products).group(:id).count

如果您希望TemplateProduct实例具有烘焙ReadyProduct计数,则需要以下实例:

tps = TemplateProduct.joins(:ready_products).select('products.*, COUNT(ready_products_products.id) ready_product_count').group(:id)
tps.first.ready_product_count
#=> 6

ready_products_products由 Rails 定义,它会在实际的表名 (products( 前面加上模型名称的"表形式"(复数、蛇形大小写、小写、ready_products(,并带有下划线。

最新更新