이 문제를 해결하는 데 어려움이 있습니다.다른 모델과 저장하기 전과 후의 모델 비교
: 일, : 방, : begin_time, : end_time, : 기어, : 메모 및 기타 (관련이없는) 특성을 가진 모델 (작업)이 있습니다. 또한 작업 모델에 설정된 마이그레이션에서 linked_id_task 특성이 있습니다. (이전 및 다음 작업을위한
확인 :
scope :for_day, lambda { |day| where(day: day) }
scope :for_room, lambda { |room| where(room: room) }
scope :with_gear, lambda { |gear| where(gear: gear) }
@tasks_on_same_day = Task.for_day(self.day).for_room(self.room).with_gear(self.gear).all
@task_on_previous_day = Task.for_day(self.day.yesterday).for_room(self.room).with_gear(self.gear).last
@task_on_next_day = Task.for_day(self.day.tomorrow).for_room(self.room).with_gear(self.gear).first
나는 새 작업을 만들거나 새로운 하나를 통해 업데이트 여부, 내가 원하는 : 그리고 (내가 함께 체인)이 해당 범위를 가지고 based on : begin_time) 개인 인스턴스 메서드 prev? 그리고 다음?. 이전 작업이있는 경우 해당 메모를 업데이트하고 해당 작업을 : linked_task_id; 다음 작업이 있으면 self.notes를 다음 작업에 대한 정보와 함께 설정하여 linked_task_id에 추가하려고합니다. 현재 날짜 (위), 전날 또는 다음 날에 작업이 없으면 아무 것도 반환하지 않습니다.
전날의 마지막 작업 (있는 경우) 또는 다음 날의 첫 번째 작업을 얻으므로 이전과 다음 날은 간단합니다. 현재 하루에 여러 작업이있는 경우에, 나는 쉽게 이전 및 다음 작업을 찾을에서 분류 작업을 할 수 즉
@self_id = @tasks_on_same_day.index(self)
을 원하고 이전 또는 다음 작업의 update_attributes에 해당 인덱스를 사용합니다. 문제는 새로 생성 된 작업 또는 업데이트 된 작업 (즉, begin_time을 업데이트 함)이 before_save 콜백에서 사용 가능하지 않다고 생각합니다.
나는 self를 현재 날짜 작업 목록으로 정렬하는 클래스 메서드를 만들 수 있습니다.
나는 이것을 코딩하는 사람을 찾고 있지는 않지만, 내가 취해야 할 접근법에 대해 혼란 스럽다.
감사합니다.
성능은 레일 3에서 실제로 문제가되지 않습니다. 모든 체인화 된 메소드는 WHERE 절에 추가됩니다. 당신이 그것으로 무언가를 할 때까지 (즉, @ next.each do | next |) 쿼리는 실제로 실행되지 않습니다. – Magicmarkker
좋은 지적, Magicmarkker. Ryan Bates는 3 개의 지연로드 (예 : 쿼리가 ActiveRecord :: Relation 객체를 반환 함) 때문에 실제로 언급 할 때까지 아무 것도 실제로 쿼리되지 않는다고 말했습니다. .last와 .first에 대한 나의 전화처럼. 고맙습니다. – douglas