我有一个广告模型,它基本上有图像,标题和网址。我使用CarrierWave作为图像。一切运作良好,但我想要计算展示次数和点击次数。
到目前为止,我添加了两个整数列:展示次数,点击次数
我有一个页面控制器,并设置了一个 @advert 变量,该变量根据页面而变化。阅读此question后,我可以增加展示次数:
def index
@advert = Advert.sample
@advert.increment! :impressions
end
我无法增加点击次数 |下面是我需要修改的代码,以便当用户点击image_tag时,他们会正常进入网址,但@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的建议,但它引出了两个新问题:
用户在鼠标悬停在图像上时会看到不同的链接,而不是最终链接。我希望让他们看到最终的网址,如果他们点击而不是重定向只是为了计算他们的点击,他们将会结束。
如果有人直接拉出广告网址(例如:/ adverts / 1),计数器会递增!没有点击。
我实际上没有广告的展示视图,但添加它以完成此操作。 所以要明确这有效,但感觉它违反了最佳做法。 感谢Aaron。
答案 0 :(得分:2)
我认为最简单的方法是将广告图片链接到广告节目操作,这可能会增加计数器,然后重定向到广告网址。
在您的链接中,将advert.url
更改为advert_path(advert)
(并设置必要的路线),然后在adverts_controller
中:
def show
@advert = Advert.find(params[:id])
@advert.increment! :clicks
redirect_to @advert.url
end
答案 1 :(得分:1)
首先想到的是添加JavaScript,以便在单击该链接时,它会异步地向您的服务器发送请求,然后允许链接按设计进行。