简体   繁体   English

在Ruby on Rails 4中使用Active Record或Squeel Gem重新编写SQL查询

[英]Re-writing a SQL Query using Active Record or the Squeel Gem in Ruby on Rails 4

I am having a lot of problems rewriting this SQL Query in Squeel or straight Active Record using Ruby on Rails 4. 我在使用Ruby on Rails 4以Squeel或直接Active Record重写此SQL查询时遇到很多问题。

All 3 numbers in the query need to be passed to the query before execution. 在执行之前,查询中的所有3个数字都需要传递给查询。 The SQL Query is below. SQL查询如下。

SELECT "users".* 
FROM "users"  
WHERE "users"."id" 
IN (SELECT "users"."id" FROM "users"  
INNER JOIN marketing_assets ON users.id = marketing_assets.user_id 
WHERE  marketing_assets.marketing_platform_id= 3 
GROUP BY users.id HAVING COUNT(DISTINCT marketing_assets.marketing_platform_id) = 1)

You can find out more detail about how it is being used at Error when trying to chain class method in controller in Ruby on Rails 当尝试在Ruby on Rails的控制器中链接类方法时 ,可以在Error上找到有关如何使用它的更多详细信息

marketing_assets_id = 3
limit_marketing_assets = 1
User.joins(:marketing_assets).where(:marketing_assets => {:marketing_platform_id => marketing_assets_id}).group(:users => :id).having("COUNT(DISTINCT marketing_assets.marketing_platform_id) = #{limit_marketing_assets}")

Here is the query I ended up writing using Squeel. 这是我最终使用Squeel编写的查询。 It works for me. 这个对我有用。

User.where{users.id.in(User.joins{marketing_assets}
.where((['marketing_assets.marketing_platform_id = ?' ] * platforms.count)
.join(' OR '), *platforms).group{users.id}
.having{{marketing_assets => 
{COUNT(DISTINCT(marketing_assets.marketing_platform_id)) => platforms.count }}})}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM