はじめに
Railsの6.1.3.2リリース以降にmainブランチに追加されていて良さそうな機能をピックアップして紹介させていただきたいと思います。
なお、ActionCable、ActionMailbox、ActiouText、ActiveStorageは自分の業務で使っていないので良い機能か判断できないため除いています。
Actionview
config.action_view.image_loading
が追加されています。
config.action_view.image_loading = "lazy"
と設定するとimage_tag
の:loading
オプションのデフォルト値がlazy
となります。
今の業務ではサイト全体に画像のlazyloadingを有効にするために専用のヘルパーを用意していたのですが、これでそれが不要となります。
ActiveRecord
ActiveRecord::Relation#excludingメソッドの追加
以下のように指定された1件のレコードやコレクションで除外できます。
Post.excluding(post)
Post.excluding(post_one, post_two)
associationsでも動作します。
post.comments.excluding(comment)
post.comments.excluding(comment_one, comment_two)
Post.where.not(id: post.id)
(1件のレコードの場合)とPost.where.not(id: [post_one.id, post_two.id])
(コレクションの場合)の短縮表記になります。
すべてのスコープ条件を反転するinvert_whereメソッドの追加
スコープの呼び出しの後にinvert_whereを呼ぶとスコープの条件が反転します。
例
class User
scope :active, -> { where(accepted: true, locked: false) }
end
User.active
# ... WHERE `accepted` = 1 AND `locked` = 0
User.active.invert_where
# ... WHERE NOT (`accepted` = 1 AND `locked` = 0)
存在する関連のみを取得するwhere.associatedの追加
Before:
account.users.joins(:contact).where.not(contact_id: nil)
After:
account.users.where.associated(:contact)
where.missingの反転となります。
参考
https://github.com/rails/rails の各パッケージのCHANGELOG.mdを参照しピックアップしました。