ProgateのRuby on Railsまとめ⑧

【Ruby on Rails Ⅹ】

*いいね機能
🌟$rails g model Like user_id:integer post_id:integer
→ どのユーザーがどの投稿をいいねしたか記録するため、データベースにlikesテーブルを作成してuser_idとpost_idのカラムを用意
$rails db:migrateで変更反映を忘れない!

🌟validates:カラム名,{presence:true}
→それぞれに値が存在することをチェックするバリデーションを追加

🌟
<% if Like.find_by(user_id:@current_user.id,
post_id:@post.id)%>
いいね済みの場合
<%else%>
いいねしていない場合
<%end%>
→ログインしているユーザーがその投稿にいいねしたデータが存在するか、条件チェックする。
※find_byは、該当するデータが見つからなければnilを返す

📖ビューファイルは必要ないので、コントローラを手動で作る
→コントローラフォルダ内に、likes_controller.rbファイルを作成
📖コントローラ内にcreateアクションを用意し、postを使ったルーティングを書く
→URLは、どの投稿をいいねしたのかという情報を送信するため、"likes/:post_id/create"

🌟@like=Like.new(user_id:@current_user.id,
post_id:params[:post_id])
→createアクション内で新たなデータ作成
※URLのpost_idから取得
📖いいねしていない時のリンク先はcreateアクションで、{method:"post"}を忘れない!

📖いいねを消すdestroyアクションも用意する(いいねする時と同様、:post_idを使う)

📖いいねボタンをアイコンにする
→Font Awesome(HTML/CSS中級編を参照)
※読み込み用のリンクは、application.html.erbの<head>タグ内に表記

🌟<span class="fa fa-heart liked-btn"></span>
→HTML要素に対してlink_toメソッドを使うには、<%=link_to("URL") do %><%end%>
内にHTML要素を書く。同様にunliked-btnも用意
挟む時のリンクタグのdoを忘れない!


*いいねの数を表示

📖countメソッド
→likesテーブルからデータの件数を取得

🌟get "users/:id/likes => "users#likes"
→ルーティングのURL部分には、どのユーザーに関する情報を表示するか判断できる書き方をする
🌟@user=User.find_by(id:params[:id])
@likes=Like.where(user_id:@user.id)
→ usersコントローラ内にlikesアクションを作成して、ビューで用いる変数を定義
※whereは複数取得できる
🌟<%@likes.each do |like|%>
<% post=Post.find_by(id:like.post_id)%>
<%end%>
→いいねした各投稿を1つずつ表示。変数likeに紐づく投稿を取得


この記事が気に入ったらサポートをしてみませんか?