私のモデルが次のようなものだとしましょう:
class Movie
has_one :last_rental_from_a_specific_user, :class_name => 'Rentals'
has_many :rentals
end
class Rental
belongs_to :movie
belongs_to :customer
# date of the rental attribute
end
class Customer
has_many :rentals
end
すべての映画を見つけて、特定の顧客による各映画の最後のレンタルを (遅延ロードではなく熱心にロードして) 含めるにはどうすればよいですか?
何かのようなもの:
@x = Movie.includes(:last_rental_from_a_specific_user("jsmith")).first
@x.last_rental_from_a_specific_user.date
SQL では次のようになります。
select
*
from
movies left join
(select * from rentals where movie_id = movies.id and user_id = ? and rental_date =
(select max(rental_date) from rentals where movie_id = movies.id and user_id = ?))
as tmp on movies.id = tmp.movie_id