2012-05-06 6 views
3

Rails 3.2 앱에는 모델명이 텍스트 열 :data입니다. 내가 가지고있는 모델에서 :직렬화 된 데이터를 검색하는 방법은 무엇입니까?

class Model 
    serialize :data, Hash 
end 

이것은 정확히 data:{"attr1"=>"foo", "attr2"=>"bar"....}의 형식으로 데이터를 저장합니다.

이것을 쇼보기에 표시하려면 <%= @model.data %>을 수행하면 전체 해시가 렌더링됩니다.

하지만 특정 속성 만 렌더링해야한다면 어떻게해야합니까? 이것이 가능한가? 그들이 작동 할 수처럼 보였다

내가 시도한 몇 가지 접근 방법 : - undefined method 'attr1' <%- @model.data[:attr1] %> 생성 -

<%= @model.data.attr1 %> 표시 아무것도

나는 뭔가를 놓치고 있습니까? . 모든 포인터 주셔서 감사합니다

답변

8
<%- @model.data[:attr1] %> 

로 교체 <%=를 시작 부분에. 실수로 <%-을 사용했습니다.

UPD :

내가 사용하는 것이 좋습니다 HashWithIndifferentAccess :

serialize :data, HashWithIndifferentAccess 

당신은 키와 기호 또는 문자열을 통해 값을 가져올 수 있습니다이 방법.

+0

doh! 그건 의미가 있습니다. 감사! HashWithIndifferentAccess에 대한 좋은 정보를 추천 해 주시겠습니까? 나의 수색에서 그것은 아주 잘 커버되지 않는다. 꽤 널리 사용 되었습니까, 아니면 더 이상 사용되지 않을 것입니까? 나는 구문의 용이함을 좋아하지만 높고 건조한 상태로 남고 싶지는 않다. –

+0

이 클래스는 부모로서'Hash'를 가지고 있으며, 키 대신에 심볼을 사용할 수 있기 때문에 설명 할 내용이 많지 않다. 하지만이 클래스는 Rails에서 매우 광범위하게 사용됩니다. 더욱 더 : ActiveSupport는'HashWithIndifferentAccess' 인스턴스를 반환하기 위해'has_indifferent_access' 메소드를'Hash' 자체에 추가합니다. 여러분의 시각에'<% = params.class %> '를 넣고 내가 농담하지 않는다고 스스로 생각해보십시오. – jdoe

2

해시 키의 문자열 형식을 사용해 보셨습니까?

<%= @model.data["attr1"] %> 

참고 :

@model.data['attr1'] 
+0

감사합니다. Suborx, 이걸 시도 했어야했는데하지 않았어! 나는 여분의 직렬화 정보에 대해 jdoe에 대한 대답을 수여했지만 최고점을 가지고있다. 내게도 –

+0

+1) 시간은 당신이 처음이라고합니다. – jdoe

+0

감사합니다. 내가 발견 한 직후에 jdoes 대답을 표시합니다. 이제 질문에 +1합니다. ;) – Suborx

관련 문제