어떤 이유로 콘솔에서 직렬화 된 속성에 액세스 할 때마다이 문자열을 일반 문자열로 처리합니다. 직렬화/역 직렬화는 콘솔에서 액세스하지 않을 때 (예를 들어보기에서) 잘 작동합니다. 예를 들어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 파일의 문법을 엉망으로 만든다.
직렬화 할 데이터가 무엇입니까? 하나의 응용 프로그램은 해시를 직렬화하는 작업에 참여했습니다. 이 해시는 예상대로 해시로 돌아 왔으며, 여기서 엔티티는 일련 화 된 데이터 인'@ combat_instance.entities.first [1] .attack_damage'와 같은 작업을 수행 할 수있었습니다. 해시에서 각 배열의 0 인덱스가 ID이므로 1을 사용하고 있습니다. 따라서 해시가 아닌 다른 것을 serialize하려면 serialized_data 값을 설정하는 메서드를 조정하십시오. – agmcleod
콘솔에서'serialized_data' 액세스를 다시 실행하면 어떻게됩니까? –
@agmcleod - 해시에서 개체를 serialize하는 중입니다. 내 질문의 예제를 사용하여'user.foo.serialized_data [0] [ "stuff"] [ "name"]'는 실제로'Name' 모델의 객체를 반환 할 것입니다. 내 질문을 업데이트했습니다. – Nick