はじめに
Railsの7系を触っていてあまり見慣れないメソッドに出会う機会が多いので、改めてまとめてみました。
sole
# Userモデルに対して、usernameが特定の値であるレコードを取得しようとする。
# usernameがユニークであることが期待されている場合に使用する。
begin
user = User.where(username: 'unique_username').sole
puts user.name
rescue ActiveRecord::RecordNotFound
# レコードが見つからなかった場合の処理
puts 'ユーザーが見つかりませんでした。'
rescue ActiveRecord::SoleRecordExceeded
# 複数のレコードが見つかった場合の処理
puts '期待されるユーザーが複数存在します。'
end
excluding
post_one = Post.find(1)
post_two = Post.find(2)
Post.all.excluding(post_one, post_two)
# SELECT "posts".* FROM "posts" WHERE "posts"."id" NOT IN (1, 2)
in_order_of
User.in_order_of(:id, [1, 5, 3])
# SELECT "users".* FROM "users" ORDER BY FIELD("users"."id", 1, 5, 3)
destroy_by
Person.destroy_by(id: 13)
Person.destroy_by(name: 'Spartacus', rating: 4)
Person.destroy_by("published_at < ?", 2.weeks.ago)
delete_by
Person.delete_by(id: 13)
Person.delete_by(name: 'Spartacus', rating: 4)
Person.delete_by("published_at < ?", 2.weeks.ago)
touch_all
# 現在時刻に設定
Person.all.touch_all
# "UPDATE \"people\" SET \"updated_at\" = '2018-01-04 22:55:23.132670'"