2014-02-05 4 views
0

각 블록의 트럭 개체를 사용하여 .deliveries.last를 호출하면 레일스는 해당 트럭에 대해 가장 높은 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

Rails 3.x를 사용하는 경우 ActiveRecord는 데이터베이스에서 가져온 레코드를 자동으로 정렬하지 않습니다. last는 가장 높은 기본 키가있는 레코드가 아닙니다. Rails 4에서 ActiveRecord는 기본 키순으로 정렬합니다. 레일 3

시도 if truck.deliveries.order(:id).last....

나는 또한에 이름이 분리

  • 에서

    • 테스트 할 수있는 모델의 범위에이 논리의 일부를 파괴 제안 할 수

      의미 론적 방식 (당신에 의한)

    • 코드베이스에서 체인화되어 재사용 가능

    More info on scopes

  • +0

    당신의 팁을 주셔서 감사하지만 또한 레일 4를 사용하고, 나는 .sort_by {사용하여 시도 | X | x.id} 같은 문제가 계속 발생합니다. – avalente1

    관련 문제