週刊Railsウォッチ(20190415-1/2前編)Railsバージョンアップに便利なstill_life gem、Zeitwerkの改修進む、named_capture追加ほか

こんにちは、hachi8833です。RubyKaigi 2019はもう目前ですね。 サイト: RubyKaigi 2019 つっつきボイス:「(つっつき時点→)RubyKaigiもう来週ですか!」「早いな〜📅」「改めて説明すると、RubyKaigiはRubyのコアな話を3日間にわたって聞ける年1回開催のカンファレンスです」「ここ数年は日本の地方都市を巡回していて、今年は博多で開催されます」「今回は参加しませんが、もし行ってたらコアな話についていけるかしら😅」「そこも楽しさのひとつだと思います❤️: 『ここまでやる人がいるんだ』みたいな驚きがありますし」「個人の感想ですが😆、参加するたびにモチベが急上昇しました📈: 自分も何かやれるんじゃないかという気持ちが沸々とわいてくるというか」 RejectKaigi2019も東京と博多の同時開催で盛り上がったようです。 先日のRejectKaigiでのRubyKaigiタイムテーブル徹底解説のメモを書きました。全然メモしきれてないのですが、わたしみたいなRubyKaigi初心者の方の、少しでもお役に立てば大変幸いです!https://t.co/nDp0eshbj5 — makicamel (@makicamel) April 14, 2019 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください ⚓Rails: 先週の改修(Rails公式ニュースより) 今回はコミットログから見繕いました。 ⚓モデルJOINのbelongs_toのautosave: trueで無効なレコードが保存される問題を修正 PR: Fix “autosave: true” on belongs_to of join model causes invalid records to be saved by lcreid · Pull Request #28155 · rails/rails issue: “autosave: true” on belongs_to of join model causes invalid records to be saved · Issue #28080 · rails/rails autosave: trueの循環を修正 インスタンス変数ではなく、activerecord/lib/active_record/autosave_association.rbのsave_collection_associationメソッドでローカルな変数を使うようにする。 以前は、autosave: trueがいくつも循環していた場合に、has_many関連付けのコールバックが、同じ関連付けの同じコールバックの別のインスタンスが実行完了していないにもかかわらず、実行されてしまっていた。 コールバックの最初のインスタンスに制御が戻った時点でインスタンス変数が改変され、以後、関連するレコードが正しく保存されなかった。特に、has_manyに対応するbelongs_toのIDフィールドがnilになる。 同PRより大意 つっつきボイス:「autosave: trueってやったことない😅」「↓ここがポイントのようです」 # activerecord/lib/active_record/autosave_association.rb#L385 + # インスタンス変数をローカル変数に保存することで + # コールバック全体をリエントラントにして#28080を修正する + new_record_before_save = @new_record_before_save … – if records = associated_records_to_validate_or_save(association, @new_record_before_save, autosave) + if records = associated_records_to_validate_or_save(association, new_record_before_save, autosave) 「インスタンス変数をいったんローカル変数に入れる…?パッと見あまり意味がなさそうに見えるけど、マルチスレッドの文脈でインスタンス変数が共有されておかしくなってたのを修正したとかそんな感じかな?🤔」「インスタンス変数が他から変更されてたのに保存できちゃってたとか」「そういう感じですね」「その割にはdupしてないしな〜: インスタンス変数を引き回さないという意味でこの書き方は正しいんだけど、これでバグが直るのかどうかまだピンとこない😅」「とりあえず次行きましょう〜」 よく見たら2017年2月にオープンしたプルリクなので長い旅でしたね。久しぶりにy-yagiさんブログを覗いてみました。 参考: rails commit log流し読み(2019/04/10) - なるようになるブログ autosave: trueが指定されている、かつ、参照が循環しているassociationがあった場合に、idの指定が無い不正なjoin recordが生成されてしまうバグがあったのを修正しています。 同ブログより ⚓==とハッシュメソッドのアロケーションを削減 PR: Improve == and hash methods on various schema cache structs to be allocation free. by casperisfine · Pull Request #35875 · rails/rails # 同PRより Warming up ————————————– Orginal == 66.978k i/100ms Orginal #hash 38.182k i/100ms New == 165.441k i/100ms New #hash 145.549k i/100ms Calculating ————————————- Orginal == 846.966k (± 4.4%) i/s – 4.287M in 5.073426s Orginal #hash 457.440k (± 7.2%) i/s … Continue reading 週刊Railsウォッチ(20190415-1/2前編)Railsバージョンアップに便利なstill_life gem、Zeitwerkの改修進む、named_capture追加ほか