1

基本的に画像、タイトル、URL を持つAdvertモデルがあります。画像にはCarrierWaveを使用しています。すべてうまく機能していますが、インプレッションクリックをカウントしたいと考えています。


ここまでで、インプレッション数とクリック数の 2 つの整数列を追加しました

ページコントローラーがあり、ページに応じて変化する@advert変数を設定しました。この質問を読んだ後、インプレッションを増やすことができます:

 def index  
   @advert = Advert.sample  
   @advert.increment! :impressions  
 end   

クリック数を増やすのに問題があります| 以下は、ユーザーが image_tag をクリックすると、通常どおり URL に移動するが、@advert によってクリック列がインクリメントされるように変更する必要があるコードです。これが私の現在のコードです(私はHAMLを使用しており、これはファイル内のコードです:_advert.html.haml):

  = link_to image_tag("#{advert.foto_url.to_s}",:alt => "an image ad linking to #{advert.url}", :title => advert.title), advert.url, :target => "blank"

インクリメントを成功させる最も簡単でクリーンな方法は何ですか? 誰かが上のリンクをクリックしたときの広告のクリック属性?

アップデート:

以下の Aaron からの提案を使用していますが、2 つの新しい懸念が生じます。

  • ユーザーが画像の上にマウスを置くと、最終的にたどり着くリンクとは異なるリンクが表示されます。単にクリックをカウントするためにリダイレクトするのではなく、クリックした場合に最終的に表示される最終的な URL を表示してもらいたいと考えています。

  • 誰かが広告の URL (例: /adverts/1) を直接取得すると、カウンターが増加します。クリックせずに。

私は実際には Advert 用のショー ビューを持っていませんでしたが、これを行うために追加しました。明確にするために、これは機能しますが、ベストプラクティスに違反しているように感じます. アーロンに感謝します。

4

2 に答える 2

2

最も簡単な方法は、広告画像を広告表示アクションにリンクすることです。これにより、カウンターがインクリメントされ、広告 URL にリダイレクトされます。

リンクで、次のように変更advert.url(advert_path(advert)および必要なルートを設定) し、次のようにしadverts_controllerます。

def show
  @advert = Advert.find(params[:id])
  @advert.increment! :clicks
  redirect_to @advert.url
end
于 2012-11-03T16:31:00.243 に答える
1

最初に頭に浮かんだのは、JavaScript を追加して、そのリンクがクリックされたときに非同期でサーバーにリクエストを送信し、リンクが設計どおりに通過できるようにすることでした。

于 2012-11-04T03:35:27.393 に答える