arel_table を使ってみる (Rails)

August 26, 2022

確認環境

$ 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 に出会うことはあると思うので、多少読めるようになっておければいいと思いました。


SHARE

Profile picture

Written by tamesuu