Closed Takumi-Tajima closed 4 months ago
実装時間12m
タスクばらし 33m
ゴール
投稿一覧画面から、いいねをする、いいねを消せる状態にする
ルーティング設定 1m
コントローラ作成 5m
[x] rails g controller users/likes_controller create destroy
create
@like_post = Like.new(user_id: current_user, post_id: params[:post_id])
@like_post.save
redirect_to request.referer || root_path
destory!
@like_post = current_user.likes.find_by(post_id: params[:post_id])
@like_post.destroy!
redirect_to request.referer || root_path
ここまで実装6m
ビューを作成 20m
[ ] view/layout/_posts.html.haml内に記述する
ここはレイアウトを見て判断する
- Like.new(user_id: current_user, post_id: params[:post_id])
+ current_user.likes.create!(post_id: params[:post_id])
関連をつかって作りたい
戻り値を扱わないのであれば、save!
create!
をつかう
create
@like_post = current_user.likes.create!(post_id: params[:post_id])
redirect_to request.referer || root_path
destory! @like_post = current_user.likes.find_by(post_id: params[:post_id]) @like_post.destroy! redirect_to request.referer || root_path
メモ
- 関連で作成する、が抜けていた
posts_controllerがuser配下になっていた
ここまでの時間
[x] _likes_btn.html.hamlを作成する
いいね判定メソッドを作成する
どうやって判定をするのか?
中間テーブル(likesテーブル)にその投稿のIDがあれば、いいねしてない(false)
[ ] user.rbに下記を記述する
def already_liked?(post)
self.likes.exists?(post_id: post.id)
end
_likes_btn.html.hamlに下記を記述する
- if user_signed_in?
-if current_user.already_liked(post)
= button_to post_likes_path(post_id: post), class: 'text-decoration-none', method: :delete do
.i class: 'fa-regular fa-heart'
- else
= button_to post_likes_path(post_id: post), class: 'text-decoration-none', method: :post do
.i class: 'fa-solid fa-heart'
_postにrenderをする
タスクばらし 22m
font-awsomeを入れてなかった→抜けてた
[x] fontawesomeを使用する
[x] application.cssに下記を記述してあるか確認する、なければ記入
/*
*= require font-awesome
*/
上記ではできなかった。 実装時間 約60m
PR修正 +60
n + 1問題でエラーに詰まる +60m
残りのタスク
ユーザーのプロフィールページ機能を作成する
タスクばらし:自分のプロフィールページを表示する
[x] コントローラを作成する10m
edit、update、showのみを許可する
[x] rails g controller users/profiles show edit update
[x] before action
private
def set_user
@post = current_user
end
[x] update
def update
if @post.update(post_params)
redirect_to post_path(@post), notice: t('controllers.common.updated', model: '投稿'), status: :see_other
else
render :edit, status: :unprocessable_entity
end
end
※上記だとdeviseで弾かれるのではなかろうか?一旦ここまで実装するか
タスクばらし→27m
controllerとviewはセットでバラすべきなのに、また忘れた
上記のエラーが発生
ここまで実行時間:7m
set_userがpost変数で定義されていた 1m
def user_params
params.require(:user).permit(:about_me, :blog_url)
end
抜け漏れ
コントローラ分ければ、deviseのストパラは回避できるんだ
プラスの実装時間:5m
likesテーブル、like modelを作成する
見積もり:15m ゴール:コンソールからlikeインスタンスを作成して、Like.allでuser_idとpost_idを確認できるようにする
likeマイグレーションを作成する
userとpostの複合インデックスが必要→同じ組み合わせは存在しない
[x] 複合indexを貼る
like modelにリレーションを追加する
userとpost modelにリレーションを追加
consoleでLikeモデルを新しく作成してみる
タスクばらし 20m