计算在Rails中单击链接的次数的问题

时间:2011-06-23 10:02:35

标签: ruby-on-rails-3 link-to

我有一个包含许多记录的数据库,每个记录都有一个关联的URL。目前我设置了一些东西,以便当人们点击特定记录的链接时,他们会被重定向到相应的URL。该代码目前是:

<%= link_to image_tag( alldata.picture.to_s + ".gif"), alldata.URL_link %>

这很好。我想现在修改这个,以便在点击链接时,一个名为:click_count的参数,对于所有记录,它都被设置为0。

阅读,我相信你可以使用以下形式的东西来做到这一点:

<%= link_to image_tag( alldata.picture.to_s + ".gif"), alldata.URL_link, {:controller => params[:controller], :action => "clickcountplusone", :product_name => alldata.product_name}  %>

控制器中包含以下内容:

def clickcountplusone
  clickeditem = Entiredatabase.find(params[:product_name])
  clickeditem.update_attribute(:click_count => clickeditem.click_count + 1)
end

虽然这不会产生错误,但它也不会增加计数...有人可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你真的不需要为此单独采取行动。相反,只需使用默认的show操作,并在调用操作时递增计数器,如下所示:

def show
   @item = Item.find(params[:id])
   Item.increment_counter(:views, @item.id)
end

无论何时查看该页面,这都会增加计数器 - 因此,如果您只想跟踪特定链接后面的视图,您可以执行以下操作:

def show
   @item = Item.find(params[:id])
   if params[:from_link]
     Item.increment_counter(:views, @item.id)
   end
end

然后在你的link_to助手中添加一个额外的参数:

link_to(image_tag("blah.jpg"), item_path, {:from_link => true}

希望这有帮助。

答案 1 :(得分:0)

update_attribute上的你的sintax错了:

clickeditem.update_attribute(:click_count => clickeditem.click_count + 1)

应该是:

clickeditem.update_attribute(:click_count, clickeditem.click_count + 1)

小心,update_attribute收到(name, value)update_attributes收到hash。更多信息here

另请查看increment counter

Item.increment_counter(:click_count, @item.id)