2011-06-24 40 views
0

我正在嘗試使用update_attribute命令,但努力讓它工作(完全),並希望有人能指點我正確的方向?初學者苦於使用update_attribute命令

我以前發佈過一個關於這個問題的問題,它在給出對發生的機制的感受方面非常有用,但不幸的是它並沒有真正實現它的工作。

我有一個項目(項目),其中包括':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

<%= 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 
+0

感謝這個 - 你的邏輯,似乎很多更有前途比我的...我做了你的改變,但我仍然得到一個錯誤(這是我的錯誤不是你的...),我也一直在努力解決。我得到以下消息:#<#:0x27037e0>'未定義的局部變量或方法'clickcountplusone'。這是routes.rb的問題嗎?目前,'資源:uniquewetsuits做的,得到:clickcountplusone,end',當我輸入'rake routes'時,clickcountplusone會出現。再次感謝 – Texas

+0

也正在使用'get'一個問題,因爲我已經閱讀過一些建議應該使用'post'來代替,但是我無法收集這是否可以使用'link_to'? – Texas

+0

如果您已經爲您的資源命名了路由,則可以在link_to中使用路由助手:'<%= link_to selecteditem.item_name.to_s,send(「clickcountplusone _#{params [:controller]} _ path」,selecteditem.item_name) >'。但是你的params [:controller]應該等於'rake routes'中這個資源的路由名 – Hck