Railsの使用3.2。2つのオプションが必要だとしましょう:
- すべての旅行写真を入手してください。
- 最初の旅行の写真を入手してください。
私は次のコードを持っています:
# trip.rb
class Trip < ActiveRecord::Base
has_many :trip_days
def trip_photos
if (photos = trip_days.map(&:spots).flatten.map(&:photos).flatten.map)
photos.each do |photo|
photo.url(:picture_preview)
end
end
end
def trip_photo
trip_photos.first
end
end
# trip_day.rb
class TripDay < ActiveRecord::Base
belongs_to :trip
has_many :trip_day_spots
has_many :spots, :through => :trip_day_spots
end
# trip_day_spot.rb
class TripDaySpot < ActiveRecord::Base
belongs_to :trip_day
belongs_to :spot
end
#spot.rb
class Spot < ActiveRecord::Base
end
# trips_controller.rb
class TripsController < ApplicationController
def index
@trips = Trip.public.paginate(:page => params[:page], :per_page => 25)
end
end
予想どおり、このtrip_photos
メソッドは多くのSQLクエリを生成します。それを行うためのより良い方法があるのだろうか?