IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

Rails で「いいね」機能を作ってみる

はじめに

以下の記事を参考にして、Rails で「いいね」機能を作ってみる。

 

作ってみる

サンプル用のプロジェクトを作成する。

  • rails new likes_sample
  • cd likes_sample

 

devise をインストールする。

  • echo 'gem "devise"' >> Gemfile
  • bundle

 

devise の初期設定をする。

  • bin/rails g devise:install
  • bin/rails g devise User

 

サンプル用に Post モデルを作成する。

  • bin/rails g scaffold Post title:string body:text user:references

 

app/models/post.rb で、Post が複数のいいねを持てるにする。

f:id:matt-note:20190715131305p:plain

 

app/models/user.rb で User が複数回いいねできるようにする。

f:id:matt-note:20190715225334p:plain

 

「いいね」を表現する Likes モデルを作成する。

  • bin/rails g model Like post:references user:references

 

データベースに反映させる。

 

config/routes.rb を編集する。

f:id:matt-note:20190715130714p:plain

 

いいね機能のコントローラを作成する。

  • bin/rails g controller likes

f:id:matt-note:20190715225739p:plain

 

app/views/posts/show.html.erb で「いいね数」と「いいねボタン」を表示する。

f:id:matt-note:20190715221603p:plain

 

app/views/layouts/application.html.erb にユーザー登録・ログアウトのリンクを追加する。

f:id:matt-note:20190715130806p:plain

 

コンソールからサンプル用のデータを作成する。

  • User.create(email: "likes@example.com", password: "password", password_confirmation: "password")
  • Post.create(title: "タイトル", body: "本文", user_id: 1)

 

サーバーを起動して、サインインする。

f:id:matt-note:20190715130631p:plain

 

個別の投稿ページにアクセスすると、いいねボタンといいね数が表示される。いいねボタンを押すと、いいね数を増やすことができる。

f:id:matt-note:20190715221625p:plain


一人のユーザーは1つの投稿に対して1回だけ「いいね」できるようにしてみる。

app/controllers/likes_controller.rb に以下のコードを追加する。

f:id:matt-note:20190715230005p:plain

 

これでユーザーが複数回いいねをできないように作成できた。

f:id:matt-note:20190715221827p:plain

 

いいねの取り消し機能を作ってみる。

app/controllers/likes_controller.rb に destroy アクションを作成する。

f:id:matt-note:20190715230213p:plain

 

app/views/posts/show.html.erb で条件分岐して「いいね・いいね取り消し」ボタンを表示する。

f:id:matt-note:20190715230745p:plain

 

サーバーを起動してアクセスしてみる。

f:id:matt-note:20190715231005g:plain

-> いいねといいね取り消し機能を作成できた。