這兩天挑戰了12 in 12 Challenge的作法,目前第一關有學到一個投票的gem,筆記下來怕以後忘記。
不外乎這個gem的名稱正是acts_as_votable
以下是實作方法
首先先建立變數,這裡照著作者給的方法直接輸入,db資料庫會幫你把內容都建好,算是相當方便,連vote的變數都不用自己設。
rails generate acts_as_votable:migration
之後一樣rake db:migrate
我們可以到db來看是否已經建立好?
接下來我們需要在控制該頁面的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的頁面將他實作
本機端測試成功
一個帳號只能對一個link做出like或是dislike其中一項選擇。
以上是比較簡易的作法,詳細內容請閱讀該作者的文件!