2012-09-04 3 views
1

이것은 극도로 간단해야하지만 나는 벽을 내 머리에 대고 대답을 찾으려고합니다. 아래 표시된 인스턴스 메서드를 사용하여 마지막으로 업데이트 된 레코드를 찾고 싶습니다. 내 할당 모델은 다음과 같습니다activerecord - 시간 형식

class Subject < ActiveRecord::Base 
    has_many :assignments, :dependent => :destroy 

    def get_last_assignment_date 
    @last_date = self.assignments.select("date_assigned").last 
    @last_day = @last_date.wday 
    end 

:

undefined method `wday' for #<Assignment date_assigned: "2012-08-30"> 

은 내가 활성 기록에 의해 반환 된 값을 변환해야합니다

create_table "assignments", :force => true do |t| 
t.date  "date_assigned" 
<snip> 

을하지만 레일은 get_last_assignment_date에 대한 다음과 같은 오류를 반환 루비가 처리 할 수있는 시간 형식이지만 어떻게해야 하는지를 알 수 없으며 아무도 그것을 수행하는 방법을 쓰는 데 방해가되지 않는 것처럼 보인다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 크게 감사 할 것입니다.

답변

1

이 :

self.assignments.select("date_assigned").last 

Assigment 객체가 아닌 Time 개체를 반환합니다.

그래서, 대신 :

@last_day = @last_date.wday 

당신은 할 필요가 :

@last_day = @last_date.date_assigned.wday 

당신이 인식 될 수 있지만 단지의 경우 : select("date_assigned").last 당신에게 제공하지 않습니다 최신 날짜. 당신은 order을 사용해야합니다 : 물론

self.assignments.order(:date_assigned).last 

가장 최근에 생성 된 객체는 또한 중요하지 않습니다 다음 최신 date_assigned로 한 경우.