2014-03-02 2 views
0

참고 :이 상황은 내 rspec 사양에서만 발생합니다.왜 model.read_attribute가 nil을 반환합니까?

저의 이해는 model.read_attribute(:attr_name)returns a typecasted attribute value입니다. 즉, attr_name이 정수 열에 속하면 read_attribute(:attr_name)은 Fixnum을 반환합니다.

하지만 ...이

model.read_attribute(:attr_name)nil

model.attr_name가 아닌 전무를 돌려줍니다 Fixnum

레일 버전 : 4.0.3

+0

정보가 충분하지 않습니다. 아마도 열에는 실제로 'nil'값이 포함되어 있을까요? 또는 유효한 매개 변수를 제공하지 않았습니까? 설명에서 명확하지 않은 것은 무엇입니까? 'model.foo' 메쏘드에 의해 반환되는 값을 읽고 싶다면'model.read_attribute (: foo)'('Symbol'에주의하십시오)를 호출해야합니다. – spickermann

+0

@spickermann 그래, 나는 상징에 대해 알고있다. 나는 나의 질문에 약간의 편집을했다, 잘하면 그것이 지금 명확하다. – tommi

+0

불완전한 레코드를 만들거나 뭔가를 모의하는 팩토리를 사용하고있을 가능성이 있습니까? – xlembouras

답변

0

TLDR 버전

내 코드가 기본값으로 예상 됨 attr_name의 값은 적어도 0이되어야하지만 특정 상황으로 인해 데이터베이스 테이블의 attr_name 열의 기본값은 null입니다. 위의 오류가 발생했습니다.

자세한 explaination

내 개발 데이터베이스의 스키마 내 프로덕션 데이터베이스와 동기화이었다 (때문에 생산에 들어갔다하지 않은 몇 가지 마이그레이션에). 따라서 rake db:migrate을 실행할 때마다 동기화되지 않은 개발 데이터베이스의 스키마를 기반으로 schema.rb이 생성되었습니다. 그리고이 스키마는 rake db:test:prepare에 의해 사용되어 오래된 스키마를 기반으로 데이터베이스를 생성합니다. 가장 중요한 점은 코드에서 attr_name의 값이 attr_name에서 최소 0 값이 될 것으로 예상했지만 오래된 스키마에서는 attr_name 열이 기본적으로 null이었습니다.

관련 문제