1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails 6.1.3.2以降で追加される予定の機能のピックアップ

Last updated at Posted at 2021-03-19

はじめに

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を参照しピックアップしました。

1
1
3

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?