Active Recordで発行するクエリに関するTipsをいくつか紹介します。
😎 like句のサニタイズ:sanitize_sql_like
like
句の検索ワードはサニタイズを忘れてしまいがちです。そこでサニタイズをするsanitize_sql_like
を使うべきです。
# Like句の検索ワードのサニタイズがされていない |
😸 グルーピングしたカウント:group.count
group(:column).count
でグルーピングした単位でcountを取得できます。
Article.group(:category_id).count |
joinと組み合わせてカウントを行いたい場合は「activerecord-precount」というRubyGemsが便利です。
🐡 少しずつデータを取得:find_each
find_each
は一定件数ずつデータをDBから取得してメモリに展開し処理を行います。大量のデータを処理する場合はメモリに負荷をかけずに効率的に処理を行うことができます。
Article.find_in_batches(batch_size: 100).to_a |
find_each
はorder
とlimit
を無視するので、注意してください。
🐹 ModelでURLを取得する
ControllerやView以外で、routes.rbで指定したURLを取得する場合はRails.application.routes.url_helpers
をincludeします。
class Article < ApplicationRecord |