【问题标题】:Have 3 join tables, trying to filter responses with a field value of less than 50有 3 个连接表,试图过滤字段值小于 50 的响应
【发布时间】:2014-10-08 07:02:01
【问题描述】:

在我的市场中,我在这样的模型中有 3 个连接表...

  • 卖家-有很多产品,通过交易,有很多 交易
  • 交易-属于产品,属于销售
  • 产品-有很多卖家,通过交易,有很多 交易

我试图在每个卖家页面上发布他们的产品列表,以及他们竞争对手的平均价格,但仅限于数量小于或等于他们销售数量的情况。

例如卖家 1 有 iPhone 案例,他们分批销售 50 个。我想在 Transaction 连接表中显示平均价格列,但仅在 product_id 相同(即相同产品)和数量列

我有以下代码,它给了我一个交易列表,但是当我将平均函数放在价格字段上时,它给了我所有价格的平均值,而不是过滤那些数量为

<% product_sums = @seller.trans.group(:product_id).average(:price) %>
<% product_qty = @seller.trans.group(:product_id).sum(:quantity) %>
<% Product.joins(:trans).where("trans.quantity <= ?", product_qty).where(id: product_sums.keys).sort_by {|b| -product_sums[b.id]}.each do |result| %> 

<td><%= product_sums[result.id] %></td>

有人可以帮忙做第二部分吗?仅过滤数量为 的价格

谢谢

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    尝试在一个 erb 标记中执行此操作并在其中使用一个

    <% product_sums = @seller.trans.group(:product_id).average(:price) 
       product_qty = @seller.trans.group(:product_id).sum(:quantity)
       Product.joins(:trans).where("trans.quantity <= ? and products.id IN (?)", product_qty, product_sums.keys).sort_by {|b| -product_sums[b.id]}.each do |result| %> 
    

    【讨论】:

    • 您好,谢谢您的回复。我已经尝试过您的建议,并尝试将 products.id IN 修改为 product.id、products_id 和 product_id 但继续收到此错误消息...SQLite3::SQLException: near ",": syntax error: SELECT "products".* FROM "products" INNER JOIN "trans" ON "trans"."product_id" = "products"."id" WHERE (trans.quantity &lt;= '--- - 1 - 10 ','--- - 2 - 10 ' and products.id IN (1,2)) 知道如何提供帮助吗?再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多