Проблема подсчета количества нажатий на ссылку в Rails - PullRequest
0 голосов
/ 23 июня 2011

У меня есть база данных с несколькими записями, каждая из которых имеет связанный 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 ]

1 голос
/ 23 июня 2011

Вам не нужно отдельное действие для этого.Вместо этого просто используйте действие 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}

Надеюсь, это поможет.

0 голосов
/ 23 июня 2011

Ваш синтаксис на update_attribute неверен:

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.Подробнее здесь

Также обратите внимание на инкрементный счетчик

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