我有一个包含许多记录的数据库,每个记录都有一个关联的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
虽然这不会产生错误,但它也不会增加计数...有人可以解决这个问题吗?
答案 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
Item.increment_counter(:click_count, @item.id)