2011-06-24 14 views
0

私はupdate_attributeコマンドを使用しようとしていますが、それを動作させるのに苦労していて、誰かが私を正しい方向に向けることを望んでいましたか?初心者がupdate_attributeコマンドで苦労しています

私は以前、この問題に関する質問を投稿しましたが、何が起こっているのかについての感覚を与えるという点で非常に便利でしたが、残念ながら実際には機能しませんでした。

私はアイテム(アイテム)のデータベースを持っていますが、その中には ':item_name'、 ':click_count'、および ':external_url'が含まれています。

現在、私はすべてのアイテムのリストがあるビュー(Showselecteditems)を持っています。ユーザーがアイテム名をクリックすると、適切な外部URLに誘導されます。これは、コードを使用して動作します。

<%= link_to selecteditem.item_name.to_s, selecteditem.external_url %> 
私は今、特定の項目名がクリックされた回数をカウントする機能を追加したいと思います

(つまり、すべてのユーザーの合計ではなく、個々のユーザー)、したがって、各外部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 

言うまでもなく、私は私の質問は、リンクは、カウントがインクリメントされる上でクリックされたときにように私が正しく物事を設定することができますどのように、そのためである...これは動作させることはできませんか?人々が報告している他の一般的な問題は、ページが更新されるたびに番号が増えていくことです。可能であれば、私はそれを希望しています。

以前は「アイテム」コントローラの '表示'セクションに追加することを提案していましたが、データベース自体ではなく、Showselecteditemsビューページでリンクがクリックされているため、あなたはshow、edit、destroyコマンドを取得します。どんなアドバイスも大歓迎です。すでに外部リンクを指定したため

答えて

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

感謝を

この仕事を行うための最も簡単な方法は次のようにあなたのlink_toを変更することです私はあなたの変更を加えましたが、私はまだ現時点でエラーが発生しています(これは私のエラーではありません...)。次のメッセージが表示されます: '未定義のローカル変数またはメソッド 'clickcountplusone' for#<#<クラス:0x277de50>:0x27037e0>。 routes.rbの問題ですか?現在、 'resources:uniquewetsuits do、get:clickcountplusone、end'、' rake routes'と入力するとclickcountplusoneが表示されます。もう一度おねがいします – Texas

+0

私は '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