has_oneでhas_manyの最新のレコードを取得する方法
たとえばUser
モデルがhas_many
でArtWork
を持っているときに、最新のArtWork
をhas_one
でも持ちたい場合の実装方法を解説します。
まずhas_many
関係だけの場合はこうなりますね。
class User < ApplicationRecord
has_many :art_works, dependent: :destroy
has_one :art_work, ->{ order(created_at: :desc) }
end
参照する名前をlatest_art_work
などのようにモデル名から自動類推が不可能なものに設定したい場合はclass_name
のオプション引数を指定して参照先のモデルを明示的にしましょう。
class User < ApplicationRecord
has_many :art_works, dependent: :destroy
has_one :latest_art_work, ->{ order(created_at: :desc) }, class_name: 'ArtWork'
end
参考
activerecord - Rails Associations has_one Latest Record - Stack Overflow