2011-03-10 6 views
0

일부 레일스 코드를 살펴보면서 모델의 클래스 중 하나에 serialize : some_property라는 줄이 있음을 알았습니다. 직렬화 된 속성을 포함 할 새 클래스를 비계하고 싶었지만 정확하게 수행하는 방법을 모르겠습니다. serialize 된 속성 (예 : 루비 스크립트/생성 스카 폴드)에 대해 어떤 유형을 선언해야합니까? NewClass serialized_property : (여기에는 무엇을 가져야합니까?) 어떤 도움을 주셔서 감사합니다!Ruby on Rails Scaffold Serialize

답변

4

ActiveRecord::Base에서 상속받은 모델의 serialize 클래스 메소드는 해당 열/속성을 가져 와서 저장시 YAML로 변환하고로드 할 때 반대의 작업을 수행합니다. 모델에 기본 배열 또는 해시 객체를 유지하는 데 유용합니다.

레일즈는 데이터베이스에 text 유형 컬럼을 사용하기 만하면됩니다. 그래서 이전에, 당신은 당신의 직렬화 된 필드에 대해 다음했는지 확인하십시오 (이 경우, settings는) :

:
create_table :accounts do |t| 
    t.text :settings 
end 

는 그런 다음 모델은 serialize에 전화를 추가로 간단해야
class Account < ActiveRecord::Base 
    serialize :settings 
end 

Account.new(:settings => { :big_head_mode => true, :awesome => true }).save을 호출하면 레일스는 자동으로 settings 해시를 YAML로 직렬화하여 데이터베이스에 유지합니다.

그리고 분명히 말하면, 비계는 그 문제와 아무 관련이 없습니다. 비계를 생성 한 후에도 모델에 serialize에 대한 호출을 추가해야합니다.

+0

고마워요! 모든 것이 아름답게 작동했습니다. – hassaanm

+0

@coreyward 해시 배열에도 사용할 수 있습니까? – Ivan

+0

@Ivan : 항상 시도해 볼 수는 있지만, Yaml과 완벽하게 번역 할 수있는 것은 무엇이든 잘 직렬화해야합니다. 예를 들어, {{key : value}, {key : value} – coreyward