Ruby on Rails 3 以降で,ActiveRecord層から呼び出されるライブラリ。
SQL文を発行するためのエンジン。Rails3のORマッピング機能を支える部分。
DB操作処理を,メソッドチェイン風のコードで記述可能にする。
設計思想は関係代数に基づく。
2024/04/12分のコミットです。 CHANGELOGへの追加はありませんでした。 Arel: wrap SELECT statements in parentheses when generating SQL for UNION activerecord/lib/arel/visitors/postgresql.rb、 activerecord/lib/arel/visitors/to_sql.rbの修正です。 ArelでUNIQO用のSQLを生成する際に、SELECTを括弧で括るよう修正しています。recursive CTEをサポートする予定があり、その対応のために必要な為、とのことで…
2024/04/06分のコミットです。 CHANGELOGにのったコミットは以下の通りです。 actioncable/CHANGELOG.md Record ping on every actioncable message Record ping on every actioncable message Action Cableの修正です。 pingとwelcome message typeでしかconnectionを維持するようになってなかったのを、全てのAction Cableのmessageで受信した際にconnectionがactiveである旨判断するよう修正しています。 Updat…
2024/04/04分のコミットです。 CHANGELOGにのったコミットは以下の通りです。 railties/CHANGELOG.md Allow Actionable Errors encountered when running tests to be retried. Merge pull request #51449 from p8/guides/remove-proxy-association rails guideのActive Record Associationsの修正です。 private APIであるproxy_association accessorについての説明を削除…
2024/03/26分のコミットです。 CHANGELOGにのったコミットは以下の通りです。 railties/CHANGELOG.md Skip generating a test job in ci.yml when a new application is generated with the --skip-test option. activerecord/CHANGELOG.md Retry known idempotent SELECT queries on connection-related exceptions Merge pull request #51390 from a…
2024/03/21分のコミットです。 CHANGELOGへの追加はありませんでした。 Eliminate remaining use of lease_connection in Arel::TreeManager activerecord/lib/arel/tree_manager.rbの修正です。 lease_connectionを使用している箇所が残っていたのを修正しています。 Guides visual redesign (#51341) rails guideのデザインを一新し、そのためのcssの追加や画像の変換などを行っています。新しいデザインのguideは、https://ed…
paranoiaを使っているモデルでユニーク制約のバリデーションを設定すると、論理削除済みのレコードは制約の対象から外れます。(論理削除済みのアイテムとは重複が許される) その仕組みを理解するために少しgemのコードを読んで気づきがあったので記載します。 Rails 7.0.8 paranoia 2.6.3 きっかけと概要 paranoiaを使っているモデルでバリデーションのユニーク制約をかけた際に、以下のことを知りました。 paranoiaで論理削除しているとユニーク制約の対象外になります class Book < ApplicationRecord validates :title, un…
activerecord-originator という gem を作った。 github.com pocke.hatenablog.com dev.to めっちゃArelの内部構造に依存しているのだけど、デバッグのヒントを得るツールとしては便利なのではないかと思っている。 ただ常時出しておくと鬱陶しい気もしていて、使いたいときだけピンポイントでインストールするような使い方が良いのかなあと思ったりする。でもそれだと存在を忘れるんだよなあ。 1,2時間ぐらいで仕様や実装方法を検討して最低限コメントが出るプロトタイプまで作った。 その時のコードがこれ https://gist.github.com/…
こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見るのが早いでしょう。次のログはArticlesController#indexで実行されるクエリの例です。 Article Load (0.1ms) SELECT "articles".* FROM "articles" WHERE "articles"."status" = ? /*…
こんにちは。フォースタートアップス株式会社、エンジニアの石田です。 前々回、前回とRubyの話をしました。今回もRubyの話です。Active RecordのArelを使い尽くす、という内容です。お付き合いください。 注意 この記事は「Arelを使わないといけなくなったときに参考になるように」という目的で書きました。「Arelを積極的に使っていこう」という趣旨ではないのでご留意ください。詳しくは次章にて。 そもそもArelを使うことについて ArelはRailsの内部APIです。内部APIであるがゆえにRailsユーザーがこれを使うことは公式で推奨されていません*1 *2。SQLはRDBのデー…
リサーチ・アンド・イノベーションの横山です。 アウトプットをさぼってさぼってもう5年ほどになりますが、うっかり「うちもアドベントカレンダーってやらないんですか?」と口走ってしまったため言い出しっぺの法則で記事を書くことになりました。 しばらくの間お付き合いください。 自己紹介 10年以上流しのエンジニアをしております。 いろいろな会社で働いてきましたが、ここRNIはお酒好きな人が多いのでやりたいことをやらせて貰えるのでなかなか居心地が良く、気が付けば5年ほどお世話になっています。 Rails2.0の頃からrailsで仕事をしており、趣味で書いていた頃も含めるとruby歴は20年以上になるでしょ…
はじめに Rails Tips の 14 回目です。連日の model のテストを簡単に書くための shared_example の紹介の続きです。しばらくは私の Shared example の雛形 (lib/templates/rspec/model/model_spec.rb)を一つずつ解説していく形です。 # describe "一つの <%= class_name %> オブジェクトについて" do # subject { <%= singular_table_name %> } # it_behaves_like "配列内に存在?", %w[ # described_class.f…
はじめに Rails Tips の 11 回目です。連日の model のテストを簡単に書くための shared_example の紹介の続きです。しばらくは私の Shared example の雛形 (lib/templates/rspec/model/model_spec.rb)を一つずつ解説していく形です。 # describe "<%= class_name %> クラスについて" do # context "order_sort_order" do # subject { described_class.order_sort_order } # it_behaves_like "昇順…
2023/12/09分のコミットです。 CHANGELOGにのったコミットは以下の通りです。 railties/CHANGELOG.md Use bin/rails runner --skip-executor option to not wrap the runner script with an Executor. activerecord/CHANGELOG.md Add nulls_last and working desc.nulls_first for MySQL. Correct HAVING conditions active_record example query rail…
はじめに Rails Tips の 10 回目です。連日の model のテストを簡単に書くための shared_example の紹介の続きです。しばらくは私の Shared example の雛形 (lib/templates/rspec/model/model_spec.rb)を一つずつ解説していく形です。昨日で属性に関するテストが一通り終わったので、次の scope やクラスメソッドに関するブロックです。今日からまた一つずつ紹介していきます。 # describe "<%= class_name %> クラスについて" do # context "order_sort_order" d…
2023/11/10分のコミットです。 CHANGELOGにのったコミットは以下の通りです。 railties/CHANGELOG.md Fix running db:system:change when app has no Dockerfile. activerecord/CHANGELOG.md Fix where(field: values) queries when field is a serialized attribute (for example, when field uses ActiveRecord::Base.serialize or is a JSON column…