0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

scopeをif文のように使う

Last updated at Posted at 2024-11-03

初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

scopeでのwhereの役割

whereはデータベースからレコードを絞り出す役割がありますが、
フォームから送信されてまだ保存されていないレコードも保存できます。

この絞り出す機能が、結果的にif文のような役割を果たします。

scopeにおいての比較演算子を使用する際の注意点

scope :exampled, -> { where('aaa_at <= ?', Time.current) }

のように、

scope :exampled, -> { where('aaa_at <= Time.current') }

と書かないのは、理由があります。

1.SQLインジェクション対策
直接値を埋め込むと、意図しないSQLコードが実行される恐れがあります。

2.時間の評価
'aaa_at <= Time.current'と書くと Time.currentが文字列として認識され、正しく評価されません。

安全で正確にクエリを実行するために、以上のように書く必要があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?