質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

369閲覧

find_byでデータが見つからなかった場合の対策方法

Giants

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2023/01/26 02:36

前提

railsにてフォロー機能を作成しており、先日レビューを出したところ、
relationships.find_by(followed_id: user_id).destroy の部分にて、
「relationships.find_by(followed_id: user_id)でデータが見つからなかった際に、
その後にあるdestroyメソッドを実行するとエラーになるため、エラーにならないように対策した方がいい」と指摘がありました。

[フォロー機能参考資料]:https://qiita.com/nakachan1994/items/e6107fe3003f6515e385

実現したいこと

  • relationships.find_by(followed_id: user_id).destroy以外の他の記述方法が知りたい。

発生している問題・エラーメッセージ

エラー等は特に発生しておりません。

該当のソースコード

app/models/user.rb

1 # フォローしたときの処理 2 def follow(user_id) 3 relationships.create(followed_id: user_id) 4 end 5 # フォローを外すときの処理 6   def unfollow(user_id) 7 relationships.find_by(followed_id: user_id).destroy  ←ここの箇所で指摘が入りました。 8 end 9 # フォローしているか判定 10 def following?(user) 11 followings.include?(user) 12 end

app/controllers/relationships_controller.rb

1class RelationshipsController < ApplicationController 2 def create 3 current_user.follow(params[:user_id]) 4 redirect_to request.referer 5 end 6 7 def destroy 8 current_user.unfollow(params[:user_id]) 9 redirect_to request.referer 10 end 11end

試したこと

https://qiita.com/nakayuu07/items/3d5e2f8784b6f18186f2
https://www.sejuku.net/blog/13000
上記以外にも色々と調べてみましたが、
知識が乏しく解決策が見つけられない状態でございます。

どなたか別の記述方法が分かられる方がいらっしゃいましたら、
ご教示のほどお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いちばん手抜きに対応するなら、relationships.find_by(followed_id: user_id)&.destroyと、ぼっち演算子を使うのが早いです。

投稿2023/01/26 02:49

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Giants

2023/01/26 02:54

早々にご回答いただきありがとうございます!!! 今、私も考えていたのですが、下記の記述方法だとエラーになりますでしょうか? relationship = relationships.find_by(followed_id: user_id) relationship.destroy if relationship
maisumakun

2023/01/26 03:21

それでも問題ありません。
Giants

2023/01/26 03:24

ありがとうございます!!! また何かありましたら、よろしくお願いします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問