2011-03-09 3 views
6

내 테스트에서 ActiveRecord serialize 메서드의 비 직렬화에 문제가 있습니다.
그냥 내 데이터 배열 대신 순수한 문자열을 제공합니다.레일 ActiveRecord 직렬화 메서드가 테스트 환경에서 작동하지 않습니다

예 :

User > ActiveRecord::Base 
    serialize :roles, Array 
end 

콘솔 : 테스트 환경에서

u = User.new 
u.roles = ["admin", "support"] 
u.save 
# => true 

User.first.roles 
# => ["admin", "support"] 

:

User.first.roles 
# => "--- \n- admin\n- support\n" 

그것은 String입니다. YAML serialize가 작동하지 않는 것 같지만 작동 시키려면 어떻게 해야할지 잘 모릅니다.

나는 이미 this, this, thisthis으로 알아 내려고했지만 운이 없었습니다.

모든 조언을 주시면 감사하겠습니다.
마틴

+0

어떤 레일 버전을 사용하고 있습니까? 루비 버전? –

+0

Rails 3.0.4, ruby ​​1.8.7 –

답변

2

이 모든 것을 우회하려면 AR 메서드를 "serialize"하지 않고 데이터베이스의 데이터를 직접 호출해야했습니다.

이제 테스트 환경에서 데이터를 직접 구문 분석하고 올바른 역할 배열을 제공합니다.

0
나는 그것이 문제를 해결되는지 잘 모릅니다,하지만 당신은 항상

YAML::load("--- \n- admin\n- support\n") 
# => ["admin", "support"] 

그래서 사용하여 문자열에서 배열을 다시 얻을 수

는 테스트 환경에서, 당신은 무엇을해야

YAML::load(User.first.roles) 
+0

데이터를 가져올 때 AR 직렬화 메서드가 자동으로 YAML 구문 분석을 사용하기 때문에 작동하지 않습니다. User.first.roles –

+0

@martin ... 테스트 환경에서 일어나는 .. – rubyprince

+0

정확히, 테스트 환경에서 그냥 문자열을 반환하지만 개발 및 생산에서 작동하는 개체에 더블 YAML : :로드 할 수 없습니다. 내 개체에서 두 번째 방법으로 손으로 YAML 구문 분석을하는 것은 더러운 속임수입니다. –

관련 문제