初学者正在努力使用update_attribute命令

时间:2011-06-24 00:54:10

标签: ruby-on-rails-3

我正在尝试使用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视图页面上点击了链接,而不是你所在的数据库本身获取节目,编辑,销毁命令。任何建议都非常感谢。

1 个答案:

答案 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