almost 3 years ago

這兩天挑戰了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
範例:

app/model/link.rb
class Link < ActiveRecord::Base
+  acts_as_votable
end

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

app/controller/links_controller.rb
  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其中一項選擇。

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

← 在Rails上回溯操作的方法 [Rails學習] 如何讓兩個資料表建立關聯 →
 
comments powered by Disqus