Ruby on rails Rails 4-多态关联之间的复杂查询

Ruby on rails Rails 4-多态关联之间的复杂查询,ruby-on-rails,associations,polymorphic-associations,Ruby On Rails,Associations,Polymorphic Associations,我有一个交易模型,它与产品和服务都有多态关联 以下是迁移: create_table :products do |t| t.string :name t.timestamps null: false end create_table :services do |t| t.string :name t.integer :duration t.timestamps null: false end create_table :transactions d

我有一个
交易
模型,它与
产品
服务
都有多态关联

以下是迁移:

create_table :products do |t|
    t.string :name

    t.timestamps null: false
end

create_table :services do |t|
    t.string :name
    t.integer :duration

    t.timestamps null: false
end

create_table :transactions do |t|
    t.integer :amount
    t.decimal :price
    t.references :sellable, polymorphic: true, index: true
    t.references :bill, index: true, foreign_key: true

    t.timestamps null: false
end
这是模型

class Transaction < ActiveRecord::Base
    belongs_to :bill
    belongs_to :sellable, polymorphic: true

    def total; price * amount; end
end

class Product < ActiveRecord::Base
    has_many :transactions, as: :sellable
end

class Service < ActiveRecord::Base
    has_many :transactions, as: :sellable
end
类事务
基本上,每笔交易都知道售出了哪些商品、多少单位以及每单位的成本

  • 如何按销售单位获得前5名物品

  • 我如何获得前五名的对象,按单位收入计算


似乎是定制查询/arel\u表的用例

  • 前五名物品,按销售单位? 答复:

    从“交易”组中按交易选择*,总和(金额)作为单位。可销售的交易id,交易。可销售的交易类型按单位的订单描述限额5

  • 请注意,它在MySQL中可以正常工作,但在其他数据库(如Postgres)中可能无法工作。您需要限制SELECT子句中的列,以使其能够使用它们

  • 前5名对象,按收入单位计算

    选择*,总和(金额*价格)作为从交易中带入的金额 按事务进行分组。可销售\u id,事务。可销售\u类型 按发票金额订购 限值5

  • 您可以执行原始查询或使用arel,只要您觉得合适,然后就可以获取相应的对象


    只是一个粗略的想法。我希望它有帮助

    看起来像是定制查询/arel_表的用例

  • 前五名物品,按销售单位? 答复:

    从“交易”组中按交易选择*,总和(金额)作为单位。可销售的交易id,交易。可销售的交易类型按单位的订单描述限额5

  • 请注意,它在MySQL中可以正常工作,但在其他数据库(如Postgres)中可能无法工作。您需要限制SELECT子句中的列,以使其能够使用它们

  • 前5名对象,按收入单位计算

    选择*,总和(金额*价格)作为从交易中带入的金额 按事务进行分组。可销售\u id,事务。可销售\u类型 按发票金额订购 限值5

  • 您可以执行原始查询或使用arel,只要您觉得合适,然后就可以获取相应的对象


    只是一个粗略的想法。我希望这能有所帮助

    这不是数行。一笔交易可以卖出超过1个单位,那么您是否也应该在交易表中的一列中指出这一点?对不起,如果我没有得到你的数据库结构。您能解释一下您将如何计算单位吗?然后,第一个查询可以修改为:选择*,按交易从交易组中选择金额(金额)作为单位。可销售的\u id,交易。可销售的\u类型按单位的订单描述限制5;请注意,它在MySQL中可以正常工作,但在其他数据库(如Postgres)中可能无法工作。您需要限制SELECT子句中的列,使其能够使用它们。希望有帮助,因为当GROUP BY出现在Postgresql中时,SELECT list表达式引用未分组的列(聚合函数中除外)是无效的,因为未分组的列可能会返回多个值。您是否可以添加一个示例,说明它在Postgresql中的工作方式,拜托?这不是数行的问题。一笔交易可以卖出超过1个单位,那么您是否也应该在交易表中的一列中指出这一点?对不起,如果我没有得到你的数据库结构。您能解释一下您将如何计算单位吗?然后,第一个查询可以修改为:选择*,按交易从交易组中选择金额(金额)作为单位。可销售的\u id,交易。可销售的\u类型按单位的订单描述限制5;请注意,它在MySQL中可以正常工作,但在其他数据库(如Postgres)中可能无法工作。您需要限制SELECT子句中的列,使其能够使用它们。希望有帮助因为当GROUP BY出现在Postgresql中时,SELECT list表达式引用未分组的列(聚合函数中除外)是无效的,因为未分组的列可能会返回多个值。请添加一个示例,说明它在Postgresql中的工作方式?