週刊Railsウォッチ(20190115)Rubyの<=でクラス同士を比較、Rubyの記号の読み方いろいろ、Ruby C API解説サイトほか

こんにちは、hachi8833です。一部のIME限定のようですが、こんなVim風の矢印入力方法↓があるとは知りませんでした😲。昨年知ったMacの「⌘+Ctrl+spaceで絵文字を表示できる技」以来のびっくりです。 元記事: ローマ字入力で矢印「←↑→↓」を簡単に入力する方法 | 経験知 つっつきボイス:「zに続けてhjklを入力して変換すると←↓↑→になるそうです」「たまにこういう技隠れてる」「まあIMEの辞書に登録しちゃえばいいと言えばそれまでですが☺️」「それではぼちぼち始めま〜す」 今回は2019年度初の新春公開つっつき会でした。お集まりいただいた皆さま、ありがとうございます!🙇 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを社内有志でつっついたときの会話の再構成です👄 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください ⚓臨時ニュース: Railsdmのチケットが本日から発売 ウォッチを公開する頃には売り切れるかもですました。 チケットの販売は明日1/15(火)10:00開始となります。DHHのオンラインでの質疑応答の特別講演や、Rails Core TeamのJeremy Daer氏も来日する、3トラック並行で全69セッションが行われる、史上最大規模の Rails カンファレンスとなります。ぜひご参加ください。 #railsdm2019https://t.co/wlt5BeyKC5 — Railsdm (@railsdm) January 14, 2019 注目情報です↓。 領収書の発行について: 領収書発行不可と記載しておりましたが、Stripeから領収書を送信できることがわかりましたので、発行いたします。つきましては後日、領収書の発行を希望される方向けのGoogle フォームを用意しますので、しばしお待ち下さいませ。 #railsdm2019 — Railsdm (@railsdm) January 15, 2019 ⚓Rails: 先週の改修(Rails公式ニュースより) コミットログはRails 6に向けて正月から動き出していますね。 ⚓Relation#updateにidを与えずに使える機能を導入 PR: Restore an ability that class level `update` without giving ids by kamipo · Pull Request #34836 · rails/rails # activerecord/lib/active_record/persistence.rb#L99 – def update(id, attributes) + def update(id = :all, attributes) if id.is_a?(Array) id.map { |one_id| find(one_id) }.each_with_index { |object, idx| object.update(attributes[idx]) } + elsif id == :all + all.each { |record| record.update(attributes) } else if ActiveRecord::Base === id raise ArgumentError, “You are passing an instance of ActiveRecord::Base to `update`. ” \ “Please pass the id of the object by calling `.id`.” end object = find(id) object.update(attributes) object end end つっつきボイス:「デフォルトとしてid = :allが追加されてる」「これ前からできてた気がするな🤔」「実は2013年に#34836で導入されていて、ドキュメントもテストもないままだったそうです」「なるほど、サロゲートキーを使わないこういうupdateを書いた覚えあるし」「updateならバリデーションもちゃんと走るし」 「プルリクにも書いてあるけど、どっかでデグレったっぽいですね」「ほんとだ」「5c65688の方は修正してあったけどクラスレベルの方が対応漏れてたと」 「idなしでいきなり値でアップデートする感じでしょうか?」「というよりは、whereが付いているActiveRecord::Relationに対して一括アップデートする」「あ、なるほど😋」 「しかしこのコードだとall.eachになってるから、レコードの数だけUPDATE文を発行することになるし」「効率は悪そう」「バリデーションの都合とかもあるのかも?DAOも使ってるし、ならしょうがないのかな🤔」 参考: Data Access Object - Wikipedia 「気持ち的にはUPDATE文1個でバルクアップデートやって欲しいところではあるけど」「できるというだけなのかも😆」「バルクにしたい人は生SQLでやっとくれだったりして😆」 ⚓ActiveRecordのReaperのテストを修正 PR: fix activerecord reaper_test by palkan · Pull Request #34846 · rails/rails # activerecord/test/cases/reaper_test.rb#L45 def test_some_time fp = FakePool.new assert_not fp.reaped reaper = ConnectionPool::Reaper.new(fp, 0.0001) reaper.run – until fp.reaped + until fp.flushed … Continue reading 週刊Railsウォッチ(20190115)Rubyの<=でクラス同士を比較、Rubyの記号の読み方いろいろ、Ruby C API解説サイトほか