Railsアプリに「いいね機能」を実装する方法




Railsアプリに「いいね機能」を実装する方法は??

Railsアプリでやってみたいのが「いいね機能」の実装です。

「いいね機能」がないアプリは死んだも同然。

ほぼすべてのアプリにいいね機能がついていますから。

今日は「いいね機能」をRailsアプリで実装する方法をまとめておきました。

 

例として「user」と「tweet」モデルを使って、userがある任意のtweetにいいねできる機能をつけていきます。

まず、基本的な実装方法からですね。

 

likeモデル作成

まずは「いいね(like)」モデルの作成です。

  • user_id(integer)
  • tweet_id(integer)

のプロパティを持ったモデルを作ります。

コマンドは

$ rails g model like tweet_id:integer user_id:integer

ですね。

それが終わったら、最後に

$ rails db:migrate

を発動してデータベースを更新。

 

コントローラーを作成

いいね用のコントローラーを手動で作りましょう。

likes_controller.rb

ですね。

ファイル階層のapp > controllersにぶちこみます。

likeモデルにビューファイルが必要ないので手動で作りました。

 

ルーティングを設定

ルーティングは次のように設定しましょう。

  post "likes/:tweet_id/create" => "likes#create"
  post "likes/:tweet_id/destroy" => "likes#destroy"

ポイントはgetではなくpostになっている点ですね。

いいねすると、データベース値が変化するので、postを採用しました。

 

コントローラーにアクションを追加

空っぽのコントローラーにアクションを追加。

ルーティングでも出てきましたが、今回は

  1. create
  2. destroy

の2アクションです。

それぞれこのようになってますね。

  def create
    @like = Like.new(user_id: @current_user.id, tweet_id: params[:tweet_id])
    @like.save
    redirect_to("/tweets/#{params[:tweet_id]}")
  end
  
  def destroy
    @like = Like.find_by(user_id: @current_user.id, tweet_id: params[:tweet_id])
    @like.destroy
    redirect_to("/tweets/#{params[:tweet_id]}")
   end

 

いいねボタンを表示

最後にいいねボタンを表示します。

すでにいいねしたユーザーかどうかによって、表記とリンク先を切り替え。

<% if Like.find_by(user_id: @current_user.id, tweet_id: @tweet.id) %>
        <%=link_to("いいね!済み", "/likes/#{@tweet.id}/destroy", {method: "post"})%>
      <% else %>
        <%= link_to("いいね!", "/likes/#{@tweet.id}/create", {method: "post"}) %>
      <% end %>

「いいねをしたuser_id」と「ログイン中のuser_id」が一致するかで条件分岐させます。

 

いいね数をカウントしたい時はどうする?

いいね数をカウントできると面白いですね。

ここではcountメソッドを使います。

 

tweets_controller.rbのshowアクションで、変数@like_countを定義。

likeのtweet_idが@tweet.idと一致したものをwhereメソッドで取得したものを代入します。

 

それをtweetのビューファイルshow.html.erbにて、

<%=@likes_count%>

で表示させれば、いいね数のカウントが出てくるでしょう。

 

いいねを一覧で表示する

いいねしたデータを一覧で表示したい??

そういう時は次のステップを踏むと良いですよ。

 

ルーティングを設定する

新しくuserのルーティングを追加です。

 get "users/:id/likes" => "users#likes"

 

アクションを追加

次はアクションを追加。

userコントローラーにlikesアクションを追加します。

def likes
   @user = User.find_by(id: params[:id])
    @likes = Like.where(user_id: @user.id)
    
end

 

ビューファイル追加

最後にビューファイルです。

新しくuserのフォルダ内に

likes.html.erb

を作って、そこにlikeしたtweetを表示しましょう。

<% @likes.each do |like|%>
      <!-- 変数tweetを定義してください -->
      <%= tweet = tweet.find_by(id: like.tweet_id) %>
      
      <% end%>
      
      <div class="tweets-index-item">
        <div class="tweet-left">
          <img src="<%= "/user_images/#{tweet.user.image_name}" %>">
        </div>
        <div class="tweet-right">
          <div class="tweet-user-name">
            <%= link_to(tweet.user.name, "/users/#{tweet.user.id}") %>
          </div>
          <%= link_to(tweet.content, "/tweets/#{tweet.id}") %>
        </div>
      </div>
    <!-- each文のendを追加してください -->
    <% end %>

いいねしたデータ一覧を表示できましたね?

Railsアプリを作ったら、いいね機能の実装にもチャレンジしましょう。

 

それでは!

Lin




音生入力で楽にブログを書く技が満載!
ブログ音声入力術

音声入力の使い方から文章を書くコツまで完全網羅。ブログを書きたいすべての人向けの電子書籍




コメントを残す

メールアドレスが公開されることはありません。