当我在每个区块中使用卡车对象来调用.deliveries.last时,rails不会返回具有该卡车最高ID的交付。
@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 :(得分:0)
如果您使用的是Rails 3.x ActiveRecord不会自动命令从数据库中提取记录 - 最后一个不是具有最高主键的记录。在Rails 4中,ActiveRecord按主键排序。
对于Rails 3,请尝试if truck.deliveries.order(:id).last....
我可能还建议将一些逻辑分解到模型中的范围,即
可单独测试
以语义方式命名(由你)
可链接,因此可以在您的代码库中重复使用