2012-05-22 4 views
1

어떤 이유로 콘솔에서 직렬화 된 속성에 액세스 할 때마다이 문자열을 일반 문자열로 처리합니다. 직렬화/역 직렬화는 콘솔에서 액세스하지 않을 때 (예를 들어보기에서) 잘 작동합니다. 예를 들어Rails - 콘솔에서 직렬화 된 데이터에 액세스하기

class Foo < ActiveRecord::Base 
    belongs_to :user 
    serialize :serialized_data # column type is text 
    ... 
end 

내가 app/views/users/show.html.erb에 넣어한다면 다음, :

<%= @user.foo.serialized_data.first %> 

제대로 데이터 세트의 첫 번째를 인쇄 할 다음과 같이 나는 코드가 있습니다. 내가 콘솔에서 다음 명령을 실행하면 :

> User.first.foo.serialized_data.first 

그것은 단순히 YAML 파일의 첫 번째 문자 인 -를 출력한다. 또한 User.first.foo.serialized_data은 원래 저장된 배열/해시 대신 큰 문자열을 출력합니다.

업데이트 :
:serialized_data에 데이터를 생성하고 동일한 콘솔 세션에서 데이터에 액세스하려고하면 정상적으로 작동하는 것 같습니다. 일단 콘솔을 닫은 다음 다시 입력하면 문제가 발생합니다.

EDIT :

[{"stuff" => {"name" => name, "qty" => 1}}, {"stuff" => {"name" => name2, "qty" => 3}}] 

등과 같이 접근 될 수있다 :

user.foo.serialized_data[0]["stuff"]["qty"] 
=> 1 

EDIT 2
그것은 월 대한 명확한
, :serialized_data는 다음의 형태로 해시의 배열은 또한 해시에 모델 객체를 저장한다는 점에 유의해야합니다. 아래의 주석에서 언급했듯이, 내가 준 예제를 사용한다면, user.foo.serialized_data[0]["stuff"]["name"]은 속성이있는 Name 모델의 객체를 반환 할 것입니다. 그래서 user.foo.serialize_data[0]["stuff"]["name"].id을 실행할 수 있습니다. 아마도 객체가 YAML 파일의 문법을 엉망으로 만든다.

+0

직렬화 할 데이터가 무엇입니까? 하나의 응용 프로그램은 해시를 직렬화하는 작업에 참여했습니다. 이 해시는 예상대로 해시로 돌아 왔으며, 여기서 엔티티는 일련 화 된 데이터 인'@ combat_instance.entities.first [1] .attack_damage'와 같은 작업을 수행 할 수있었습니다. 해시에서 각 배열의 0 인덱스가 ID이므로 1을 사용하고 있습니다. 따라서 해시가 아닌 다른 것을 serialize하려면 serialized_data 값을 설정하는 메서드를 조정하십시오. – agmcleod

+0

콘솔에서'serialized_data' 액세스를 다시 실행하면 어떻게됩니까? –

+0

@agmcleod - 해시에서 개체를 serialize하는 중입니다. 내 질문의 예제를 사용하여'user.foo.serialized_data [0] [ "stuff"] [ "name"]'는 실제로'Name' 모델의 객체를 반환 할 것입니다. 내 질문을 업데이트했습니다. – Nick

답변

0

문제는 편집 2에서 설명한대로 해시 값에 전체 개체를 저장하는 것이 었습니다.이 개체를 id으로 바꾸면이 문제가 해결되었습니다.

관련 문제