我正在尝试使用update_attribute
命令,但努力让它工作(根本没有)并希望有人能指出我正确的方向?
我之前发布过一个关于这个问题的问题,它对于了解正在发生的事情的机制非常有用,但遗憾的是它实际上没有让它发挥作用。
我有一个项目数据库(Items),其中包含':item_name',':click_count'和':external_url'。
目前我有一个视图(Showselecteditems),其中有一个所有项目的列表,当用户点击项目名称时,它们被定向到相应的外部URL。这可以使用代码:
<%= link_to selecteditem.item_name.to_s, selecteditem.external_url %>
我现在想要添加计算特定项目名称被点击的次数的能力(即,对所有用户而不是单个用户的总数),以及每个外部网址被访问的次数。为了解决哪个问题最受欢迎。
阅读,我相信我需要修改上面的代码:
<%= link_to selecteditem.item_name.to_s, selecteditem.external_url, {:controller => params[:controller], :action => clickcountplusone, :identifier => selecteditem.item_name} %>
并且需要在某个地方定义此函数 - 似乎只有在'application_helper'中才会找到它?
def clickcountplusone
clickeditem = Items.find(params[:identifier])
clickeditem.update_attribute(:click_count, clickeditem.click_count + 1)
rescue ActiveRecord::RecordNotFound # to avoid error if no identifier value
end
毋庸置疑,我无法让这个工作......我的问题是,我怎样才能正确设置,以便在点击链接时计数增加?人们似乎报告的另一个常见问题是,每次刷新页面时,该数字都会增加,如果可能的话,我希望这样做。
以前人们建议添加到'Items'控制器的'show'部分,但是,我不知道这是如何工作的,因为在Showselecteditems视图页面上点击了链接,而不是你所在的数据库本身获取节目,编辑,销毁命令。任何建议都非常感谢。
答案 0 :(得分:0)
这个
<%= link_to selecteditem.item_name.to_s, selecteditem.external_url, {:controller => params[:controller], :action => clickcountplusone, :identifier => selecteditem.item_name} %>
不会将用户指向some_controller#clickcountplusone,因为您已经指定了外部链接。
完成这项工作的最简单方法是修改link_to,如:
<%= link_to selecteditem.item_name.to_s, {:controller => params[:controller], :action => clickcountplusone, :identifier => selecteditem.item_name} %>
然后修改你的行动来源:
def clickcountplusone
clickeditem = Items.find(params[:identifier])
redirect_to clickeditem.external_url if clickeditem.update_attribute(:click_count, clickeditem.click_count + 1)
rescue ActiveRecord::RecordNotFound # to avoid error if no identifier value
end