初めに
疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。
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が文字列として認識され、正しく評価されません。
安全で正確にクエリを実行するために、以上のように書く必要があります。