2014-02-05 70 views
0

當我在每個塊中使用卡車對象調用.deliveries.last時,rails不會爲該卡車返回具有最高ID的交貨。Rails方法返回不同的響應

@todays_workdays = Workday.todays_workdays 
@todays_workdays.each do |workday| 
    @working_trucks << workday.driver.truck 
end 
@working_trucks.each do |truck| 
    if truck.deliveries.last.time_arrived.between?(Time.zone.now.beginning_of_day,Time.zone.now.end_of_day) # returns a delivery for each truck but not its actual last delivery (e.g. id 447) 
    ... 
    end 
end 

但是,當我使用Truck.find(truck.id),它工作正常,返回的最後交付每輛卡車

if Truck.find(truck.id).deliveries.last.time_arrived.between?(Time.zone.now.beginning_of_day,Time.zone.now.end_of_day) # returns proper last delivery for each truck (e.g. id 486) 
    ... 
end 

我不知道爲什麼會這樣。任何幫助/解釋將不勝感激。謝謝!

回答

0

如果您使用的是Rails 3.x,ActiveRecord不會自動對從數據庫中提取的記錄進行排序 - 最後一項不是主鍵最高的記錄。在Rails 4中,ActiveRecord通過主鍵進行排序。

對於Rails 3中,嘗試if truck.deliveries.order(:id).last....

我可能還建議打破一些這方面的邏輯,才能把你的模型範圍,這是

  • 檢驗的孤立

  • 在名爲語義方式(由你自己)

  • 可鏈接,因此可以在您的代碼庫中重複使用

More info on scopes

+0

感謝您的小費,但是我使用Rails 4中。另外,我嘗試使用.sort_by {| X | x.id},同樣的問題依然存在。 – avalente1