Nic Lin's Blog

喜歡在地上滾的工程師

實現投票功能 acts_as_votable

這兩天挑戰了12 in 12 Challenge的作法,目前第一關有學到一個投票的gem,筆記下來怕以後忘記。

不外乎這個gem的名稱正是acts_as_votable

以下是實作方法

首先先建立變數,這裡照著作者給的方法直接輸入,db資料庫會幫你把內容都建好,算是相當方便,連vote的變數都不用自己設。

rails generate acts_as_votable:migration

之後一樣rake db:migrate

我們可以到db來看是否已經建立好?

螢幕快照 2015-12-25 下午9.51.10.png

接下來我們需要在控制該頁面的model加入作者設計的語句acts_as_votable 範例:

class Link < ActiveRecord::Base
+  acts_as_votable
end

我們在到與該model相對應的conrtoller實作方法

  def upvote
    @link = Link.find(params[:id])
    @link.upvote_by current_user
    redirect_to :back
  end

  def downvote
    @link = Link.find(params[:id])
    @link.downvote_by current_user
    redirect_to :back
  end

upvote則是票數+1,當票數+1時紀錄當時的登入者id作為紀錄,downvote則相反為-1票。

我們在view的頁面將他實作

螢幕快照 2015-12-25 下午10.02.11.png

本機端測試成功

螢幕快照 2015-12-25 下午10.04.01.png

一個帳號只能對一個link做出like或是dislike其中一項選擇。

以上是比較簡易的作法,詳細內容請閱讀該作者的文件!

comments powered by Disqus