LoginSignup
0
0

Ruby on Railsアップデート(ActiveSupport::Callbacksで使われるメモリの削減 他 2023-10-28)

Posted at

これはなに

Railsコミッタたちが連載しているThis week in Railsの内容を、簡単な補足と併せて紹介する連載です。社内slackで毎週書いていたものですが、連載力の持ち腐れな気がしてきたので公開することにしました。

引用元

今週のトピック

ActiveSupport::Callbacksが使用するメモリを削減する

  • サブクラスと共有されるコールバックは、before/after...で生成されるProcをサブクラス間で共有しなかった
  • これは遅延的に生成されるため、アプリケーションの起動後にメモリが増大する原因にもなっていた
  • 今回の変更で、ブート時からリクエスト送信後までのメモリ増加が半減した

データベースのカラムでないattributesに対してもenumを使えるようにする

実際にやるときは、明示的な型で宣言されていないといけない。こんな感じ

class Post < ActiveRecord::Base
  attribute :topic, :string
  enum topic: %i[science tech engineering math]
end

NumberToHumanSizeConverterで負の数も扱えるようにする

# Before
helper.number_to_human_size(-1234567)
# => "-1234567 Bytes"

# After
helper.number_to_human_size(-1234567)
# => "-1.18 MB"

StrongParameters#extract_valueに空白値が含まれるようする

users/______________________________________のような変わったURLを誰かが作った場合は...とかディスカッションしててへえぇとなった

ActiveRecord::Persistence.deleteメソッドで無効な PRIMARY KEY 値を無視する

ActiveRecord::Persistence.deleteメソッドに無効な主キー値が渡されると、Active Recordは不要なDELETEクエリを実行する。例えば

irb(main):001> User.delete([])
  User Delete All (0.6ms) DELETE FROM "users" WHERE 1=0 => 0

これがなくなった

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