>>> デモサイトはこちらです <<<
>>> 参考:Bootstrapの開発環境を自動的に作る <<<
このアプリケーションでは、ユーザーはLike、Dislike、またはUnvote出来る機能を追加したいと思います。
Gemfile
gem 'acts_as_votable' gem 'devise'
ユーザー登録を作成
Deviseをインストール:
rails g devise:install
ユーザーモデルを作る:
rails g devise User
ユーザー登録のリンクを付ける
app/views/layouts/application.html.slim
- if user_signed_in? li Signed in as #{current_user.email} li = link_to 'Sign out', destroy_user_session_path, method: :delete - else li = link_to 'Sign up', new_user_registration_path li = link_to 'Sign in', new_user_session_path
記事を作成
ArticleのScaffoldを作る
rails g scaffold Article title content:text
データベースをマイグレート:
rake db:migrate
これからVoteのシステムを作ります
config/routes.rb
resources :articles do member do put 'like' => 'articles#like' put 'dislike' => 'articles#dislike' put 'unvote' => 'articles#unvote' end end
ユーザーはVoteします
app/models/user.rb
acts_as_voter
記事はVoteされます
app/models/article.rb
acts_as_votable
app/controllers/articles_controller.rb
before_action :set_article, only: [:show, :edit, :update, :destroy, :like, :dislike, :unvote] def like @article.liked_by current_user redirect_to @article, notice: "You liked this!" end def dislike @article.disliked_by current_user redirect_to @article, notice: "You disliked this!" end def unvote @article.unvote_by current_user redirect_to @article, notice: "You unvoted this!" end
記事に関するメソッド:
Voteを数える:@article.votes_for.size
Likeを数える:@article.get_likes.size
Dislikeを数える:@article.get_dislike.size
Likeされたユーザー:@article.votes_for.up.by_type(User).voters
Dislikeされたユーザー:@article.votes_for.down.by_type(User).voters
ユーザーに関するメソッド:
Likeしたかどうかを確認:current_user.voted_up_on? @article
Dislikeしたかどうかを確認:current_user.voted_down_on? @article
Likeした記事:current_user.votes.up.for_type(Article).votables
Dislikeした記事:current_user.votes.down.for_type(Article).votables
app/views/articles/show.html.slim
= link_to 'Like', like_article_path(@article), method: :put = link_to 'Dislike', dislike_article_path(@article), method: :put = link_to 'Unvote', unvote_article_path(@article), method: :put