Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 联接子查询中的计数和求和-我可以使用ActiveRecord构建此sql查询吗?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 联接子查询中的计数和求和-我可以使用ActiveRecord构建此sql查询吗?

Ruby on rails 联接子查询中的计数和求和-我可以使用ActiveRecord构建此sql查询吗?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在学习ActiveRecord。我可以建立这个查询吗 @sales_by_product = ActiveRecord::Base.connection.execute("SELECT it.name, it.id, it.seller_id, pur.volume, pur.sales FROM items it INNER JOIN (SELECT item_id, COUNT(*) AS v

我正在学习ActiveRecord。我可以建立这个查询吗

    @sales_by_product = ActiveRecord::Base.connection.execute("SELECT
    it.name,
    it.id,
    it.seller_id,
    pur.volume,
    pur.sales
    FROM items it
    INNER JOIN (SELECT
        item_id,
        COUNT(*) AS volume,
        SUM(price) AS sales,
        workflow_state AS state
        FROM purchases
        WHERE workflow_state = 'payment_successful'
        GROUP BY item_id,
        workflow_state) pur
    ON pur.item_id = it.id
    WHERE it.seller_id = '" + current_user.id.to_s + "'")
我希望尽可能多地使用AR api,但我还没有让上面的内容只使用AR


谢谢

我认为在这个查询中使用AR不是一个好主意。一开始似乎很有趣,但后来变得很烦人。而且,以后很难改变

您可以创建自己的查询生成器:

def query_for current_user
  <<-SQL
    SELECT
      it.name,
      it.id,
      it.seller_id,
      pur.volume,
      pur.sales
      FROM items it
      INNER JOIN (SELECT
        item_id,
        COUNT(*) AS volume,
        SUM(price) AS sales,
        workflow_state AS state
        FROM purchases
        WHERE workflow_state = 'payment_successful'
        GROUP BY item_id,
        workflow_state) pur
      ON pur.item_id = it.id
      WHERE it.seller_id = '" + current_user.id.to_s + "'")
  SQL
end

@sales_by_product = ActiveRecord::Base.connection.execute( query_for( current_user ))
def query\u用于当前用户

ActiveRecord是一个很好的ORM,但有时您希望直接编写原始sql。它更直接,更精确。我认为ActiveRecord有它的局限性……也许您可以描述一下sql语句应该返回什么,以帮助我们帮助您。