我有一个Transaction
模型,它与Product
和Service
都有多态关联。
这是迁移:
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名对象?
如何通过单位资金获得前五名对象?
答案 0 :(得分:0)
似乎是自定义查询/ arel_table的用例
按销售单位排名前5位的对象? ANS:
SELECT *,SUM(金额)AS单位FROM TRANSACTIONS GROUP BY transactions.sellable_id,transactions.sellable_type ORDER BY units desc LIMIT 5;
请注意,它在MySQL中可以正常工作,但可能无法在Postgres等其他数据库中使用。您需要限制SELECT子句中的列以使其与它们一起使用
前五名对象,以单位资金引入
SELECT *,SUM(金额*价格)AS money_brought_in FROM TRANSACTIONS GROUP BY transactions.sellable_id,transactions.sellable_type 通过money_brought_in desc订购 限制5;
您可以执行原始查询或使用您认为合适的arel,然后可以获取相应的对象。
只是一个粗略的想法。我希望它有所帮助