Customer、Visit、Campaign の 3 つの ActiveRecord モデルがあります。
Customer has_many :visits
Visit belongs_to :customer
Campaign has_many :visits
訪問モデルは、特定の顧客が Web サイトを訪問するたびに、訪問したページ、表示された広告、そして最も重要な購入を行ったかどうかを追跡します。キャンペーンは、サイトへの訪問中に顧客が見る一連の広告です。各キャンペーンは 1 時間続き (1 日 24 キャンペーン)、多くの訪問者がいます。
私がやろうとしているのは、「次の訪問の購入」を識別できるようにするアクティブレコードスコープまたはクラスメソッドを開発することです。
たとえば、7 月 4 日の 4 回目のキャンペーンでは、100 回の顧客訪問がありました。私は、それらの各顧客の次の訪問を見て、その次の訪問で購入した/購入した訪問/顧客を識別できるようにしたいと考えています. 私が理解するのが難しいと感じているのは、顧客のその後の訪問がすべて同じ日にあるわけではありませんが、「次の訪問」と購入につながったものを特定したいということです。
私が想像したのは次のようなものです:
Campaign.find(2232).next_visit.purchase #where next_visit and purchase are scopes
また
Visit.find(5445).next_visit.purchase
訪問モデルに購入フラグがあるので、購入スコープはかなり単純です。
scope, :purchase, where(:purchase_flag => true)
また、 Railscast #215に基づいて、訪問モデルでこのスコープを作成すると、結合とマージを使用してそれらを Customer モデルと Campaign モデルに適用できます。
Campaign.joins(:visits).merge(Visit.purchase)
これは正しいアプローチですか?もしそうなら、私はどのように私の次のスコープを定義しますか? そうでない場合は、代替アプローチとして何を提案しますか.
更新: 素晴らしい回答をいくつか得ました。一般的なコンセンサスが、Deepak のアプローチが適切であるということなのか、それとも他の応答が望ましいということなのかを知りたいだけです。