QA@IT

どんな時にデフォルトスコープを使うべきですか?

7998 PV

@ITの記事「ActiveRecordにおけるモデルの「関連」とコールバックの使い方 (2/3)」についての質問です。
デフォルトスコープが機能としてあるとわかりました。
しかし、デフォルトスコープが使いたくなる場面というのが思いつきません。どんな時にデフォルトスコープを使うべきでしょうか?

回答

典型的なパターンとしては、あるエンティティが論理削除されるようなケースで
以下のようなdefault scopeをつけるようなケースがあります。
(ここでは、deleted_atに削除日付を入れることで論理削除されたとみなすことを
想定しています)

default_scope { where(deleted_at: nil) }

こうしておくと、データ取得時にdeleted_atを条件に含めることなしに有効な
データだけを取得することができます。

ただ個人的に、default_scopeは裏で自動的にスコープが追加されるので、
時に思わぬバグの温床になったりする可能性があるので、あんまり利用しないかな
という印象があります。

利用するときは、一緒に開発する人とも十分に合意をとった上(チーム開発であれば)で、
適切に利用したほうがよいと思います。

編集 履歴 (0)
  • 使い道ない機能なのかな、と思っていましたがなるほど、そのように使うのですね。必要と思った時は、周囲に相談して導入してみようと思います。ご回答、ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。