【问题标题】:Cleanly increment! attribute on model when user clicks on a link_to image_tag干净利落的增加!当用户单击链接到图像标签时模型上的属性
【发布时间】:2012-11-03 15:59:43
【问题描述】:

我有一个 Advert 模型,它基本上有一个图像、标题和一个网址。我使用 CarrierWave 作为图像。一切正常,但我想统计展示次数点击次数


到目前为止,我添加了两个整数列:展示次数、点击次数

我有一个 pages 控制器并设置了一个 @advert 变量,该变量会根据页面而变化。阅读此question 后,我能够增加展示次数:

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

我无法增加点击次数 |下面是我需要修改的代码,以便当用户点击 image_tag 时,他们会像往常一样被带到 URL,但 @advert 会增加 clicks 列。这是我当前的代码(我使用 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"

成功增量​​的最简单、最干净的方法是什么!当有人点击上面的链接时,广告上的 clicks 属性?

更新:

我正在使用下面 Aaron 的建议,但这会导致两个新问题:

  • 当用户将鼠标悬停在图像上时,他们将看到与最终到达的链接不同的链接。我希望他们看到点击后最终到达的最终 URL,而不是简单地重定向以计算点击次数。

  • 如果有人直接调出广告网址(例如:/adverts/1),计数器会增加!无需点击。

我实际上没有 Advert 的显示视图,但添加它是为了完成这项工作。 所以要明确这是可行的,但感觉它违反了最佳做法。 感谢 Aaron。

【问题讨论】:

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


    【解决方案1】:

    我认为最简单的方法是让广告图片链接到广告展示操作,这可以增加计数器,然后重定向到广告网址。

    在您的链接中,将advert.url 更改为advert_path(advert)(并设置必要的路由),然后在adverts_controller 中:

    def show
      @advert = Advert.find(params[:id])
      @advert.increment! :clicks
      redirect_to @advert.url
    end
    

    【讨论】:

    • 亚伦。谢谢你的建议。我更新了我的问题,其中包含一些由于浏览显示视图然后重定向用户而导致的问题。我还调整了您的建议,因为我正在尝试增加! :点击。
    • 如果这是最好的答案,我很乐意为您服务。我为你的贡献给了你一个 +1。
    • 谢谢!您可以将:method => :post 添加到link_to,然后使用url 将post '/adverts/:id => "adverts_controller#show' to fix the second problem. The first problem is harder, but if are okay with my solution, you could add a title` 属性路由到link_to
    • 谢谢亚伦。我认为就像我的广告模型和我们的需求一样简单,我可以接受这个解决方案。当鼠标悬停在图像上时,我将 :title 设置为显示 advert.url。
    【解决方案2】:

    首先想到的是添加 JavaScript,以便在单击该链接时,它会异步向您的服务器发送请求,然后允许该链接按设计通过。

    【讨论】:

    • 我假设我会绑定到点击事件,只是不确定如何做剩下的事情。我仍然很讨厌 Javascript。 :(
    • 您可以在stackoverflow.com/questions/5124074/… 上做接受的答案,只需删除 preventDefault 行并返回 true。
    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多