2012-09-19 3 views
3

모델에 텍스트로 저장되지만 합리적인 것으로 해석되는 속성이 있습니다. 나는 그 처리 할 수있는이 방법이 : 대신에 합리적으로,레일이 속성의 유형을 변경 한 후에 값을 변경하는 이유는 무엇입니까?

def start 
    read_attribute(:start).to_r 
end 

나는 새로운 값으로 start 속성을 설정하십시오 start_was 도우미 메서드는 문자열을 반환합니다,하지만 난 그렇게하기 전에 올바른 값을 반환 . 왜?

Loading development environment (Rails 3.2.8) 
1.9.3p194 :001 > d = Day.find(55) 
    Day Load (8.7ms) SELECT "days".* FROM "days" WHERE "days"."id" = ? LIMIT 1 [["id", 55]] 
=> #<Day id: 55, date: "2012-03-30", start: "1/2", finish: "2/2", created_at: "2012-09-18 15:16:42", updated_at: "2012-09-19 08:20:41", day_year_id: 1> 

1.9.3p194 :002 > d.start_was 
=> (1/2) 

1.9.3p194 :003 > d.start=0 
=> 0 

1.9.3p194 :004 > d.start_was 
=> "1/2" 

답변

2

나는 이유는 보시다시피 속성 인 경우 (\ lib 디렉토리 \ active_model \ dirty.rb activemodel-3.2.8)

# Handle <tt>*_was</tt> for +method_missing+. 
def attribute_was(attr) 
    attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr) 
end 

는, 실제로 단지 변경되지 ActiveModel에서이 방법을 생각 귀하의 경우 변환을 수행하는 start 메서드를 눌렀을 때 자신의 getter를 호출합니다. 그러나 속성이 실제로 변경되면 changed_attributes 저장소에서 원시 값을 읽습니다.

+0

아, 그게 성가시다면, 완벽 해. :) – Colin

+0

고맙게도 나는 이미'Rational'에서'to_r'를 호출하여 쉽게 해결할 수 있습니다. – Colin

관련 문제