これはなに
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
これがなくなった