0

私のモデルが次のようなものだとしましょう:

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
4

2 に答える 2

0

Rentalsモデルの名前を に変更するとRental、指定された顧客 (この場合は "brian" という名前のユーザー) によるすべてのレンタルが熱心に読み込まれます。

Movie.includes(:rentals => :customer).where('customers.name = "brian"')

ただし、それを最後のレンタルに制限する方法についてはわかりません。日付順で最後のものということですか?

于 2013-01-18T04:43:03.267 に答える