確認環境
$ bundle exec ruby --version
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin19]
$ bundle exec rails --version
Rails 6.0.4.6
事前準備
モデル作成
$ rails g model SampleUser name:string
migrate
$ rake db:migrate
データ準備
$ rails c
...
irb(main):001:0> SampleUser.create!(id: 1, name: 'hoge')
arel_table を使って Active Record を操作してみる
irb(main):014:0> at = SampleUser.arel_table
=> #<Arel::Table:0x00007fcd15987058 @name="sample_users", @type_caster=#<ActiveRecord::TypeCaster::Map:0x00007fcd159870a8 @types=SampleUser(id: ...
irb(main):015:0> SampleUser.where(at[:id].gt(0)).where(at[:id].lt(5))
SampleUser Load (0.3ms) SELECT "sample_users".* FROM "sample_users" WHERE "sample_users"."id" > 0 AND "sample_users"."id" < 5 LIMIT ? [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<SampleUser id: 1, name: "hoge", created_at: "2022-08-24 15:34:58", updated_at: "2022-08-24 15:34:58">]>
少し触ってみた感じ、パーツを書いてるイメージを持ちました。
おわりに
自分ではあまり書かないかもしれませんが、他人が書いたコードを読む時に arel_table に出会うことはあると思うので、多少読めるようになっておければいいと思いました。