У меня есть три модели ActiveRecord: Customer, Visit и Campaign.
Customer has_many :visits
Visit belongs_to :customer
Campaign has_many :visits
Модель посещения отслеживает каждый раз, когда конкретный клиент посещает веб-сайт, посещенные страницы, отображаемую рекламу и, что наиболее важно, совершает ли он покупку. Кампания — это серия рекламных объявлений, которые клиенты видят во время посещения сайта. Каждая кампания длится 1 час (24 кампании в день) и имеет много посещений.
Что я пытаюсь сделать, так это разработать некоторые области ActiveRecord или методы класса, которые позволят мне идентифицировать «Покупки при следующем посещении».
Например, 4 июля четвертая кампания дня насчитывала 100 посещений клиентов. Я хочу иметь возможность просмотреть следующее посещение для каждого из этих клиентов и определить те посещения/клиенты, которые совершили/совершили покупку при следующем посещении. Что мне трудно понять, так это то, что последующие посещения клиентов не все в один и тот же день, но я хочу определить «следующее посещение» и те, которые привели к покупке.
Я представлял что-то вроде:
Campaign.find(2232).next_visit.purchase #where next_visit and purchase are scopes
or
Visit.find(5445).next_visit.purchase
У меня есть флаг покупки в модели посещений, поэтому объем покупки довольно прост.
scope, :purchase, where(:purchase_flag => true)
Также на основе Railscast #215, если я создам эту область в модели посещений я могу затем использовать объединения и слияние, чтобы применить их к моделям Customer и Campaign.
Campaign.joins(:visits).merge(Visit.purchase)
Это правильный подход? Если да, то как мне определить область действия Next, а если нет, то что бы вы предложили в качестве альтернативного подхода.
Обновление: я получил отличные ответы. Просто любопытно узнать, есть ли общий консенсус в том, что подход Дипака правильный или предпочтительнее другие ответы.