Я пытаюсь создать запрос для подсчета записей, имеющих общий идентификатор, но дважды появляющихся с разными атрибутами на моем сайте, то есть кто-то с определенным IP-адресом создает Impression
с именем «view», а затем создает один с name 'conv' (у меня есть пиксель отслеживания и вы хотите подсчитать конверсии через просмотр).Замена SQL CASE несколькими областями в Rails?
На данный момент, я считаю преобразование с использованием Rails запроса ниже, которые я преобразованный из SQL:
@impressions = Impression.select(:ip_address).group(:ip_address).having
("COUNT(CASE WHEN name = 'view' THEN 1 END) > 0 AND
COUNT(CASE WHEN name = 'conv' THEN 1 END) > 0")
Есть уборщик способ сделать это в Rails? Моя первая мысль, что использование нескольких областей может быть лучшим способом:
def self.converted(ip_address)
where("name == 'conv' and ip_address == ?", ip_address)
end
def self.viewed(ip_address)
where("name == 'view' and ip_address == ?", ip_address)
end
контроллер (не знаю, как это должно выглядеть ...):
scope :view_through_conversion, Impression.viewed & Impression.converted
...
@impressions = Impression.all.view_through_conversion(ip_address)
Но у меня нет никакого опыта работы с и я не знаю, имеет ли это много преимуществ по сравнению с моим путем. Может ли кто-нибудь дать некоторые рекомендации по наилучшему способу достижения этого в Rails?