我希望能为rails网站优化此查询提供一些帮助:
Vacation
has_many :departures
has_many :photos
Departure
belongs_to :vacation
Photo
belongs_to :vacation
我需要找到一份按出发顺序排列并显示的假期列表。因此,如果假期有两次离开,它应该在列表中显示两次(每次出发一次)。
@dates = Departure.find(:all,
:order => "start_at",
:include => [{:vacation => :photos}],
:conditions => ["vacations.duration > 1 AND start_at > ?", Time.now])
问题在于,我需要收集每个假期的所有未来离职,这会导致每个出发的新查询。
关于如何更好地实现这一目标的任何想法?
答案 0 :(得分:0)
您对该查询没有限制,那么您是否已经将所需内容拉入内存?您有一个数组,每个未来的出发时间都适合您想要展示。
所以使用你已有的数组。
vacation_id = 3 # Or whatever - this would obviously be in a loop.
@dates_for_vacation = @dates.select{|d| d.vacation_id == vacation_id}
答案 1 :(得分:0)
我认为您可以通过度假时的查询来提取数据,而不是离开。
@vacations = Vacation.find(:all,
:order => "departures.start_at",
:include => [:departure, :photos],
:conditions => ["vacations.duration > 1 AND departures.start_at > ?", Time.now])
这将找到该时间段的所有假期,但也会加载相关的出发和照片记录,从而大大减少了查询负担。
您可能需要使用查询来获取正确的离境记录。