干净地增加!用户单击link_to image_tag时的模型属性

时间:2012-11-03 15:59:44

标签: javascript ruby-on-rails ruby-on-rails-3.2

我有一个广告模型,它基本上有图像,标题和网址。我使用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。

2 个答案:

答案 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,以便在单击该链接时,它会异步地向您的服务器发送请求,然后允许链接按设计进行。