[Rails] Serialize

1752 단어
직렬 화 는 복잡 한 대상 을 문자열 시퀀스 로 데이터베이스 나 파일 에 저장 하고 읽 을 때 문자열 텍스트 를 조작 가능 한 대상 으로 복원 하 는 것 이다. 이렇게 하면 데이터 의 지속 적 인 저장 에 편리 하고 조작 성 을 잃 지 않 는 다 는 장점 이 있다.
대상 의 직렬 화 와 반 직렬 화 과정 에서 실수 하지 않도록 하기 위해 서 는 대상 의 유형 과 전환 후의 목표 형식 을 명 확 히 해 야 한다.전환 형식 을 지정 하지 않 으 면 기본적으로 YAML 전환 할 대상 유형 을 Array, Hash, JSON 로 지정 하면 해당 텍스트 를 내 보 냅 니 다. 저 장 된 복잡 한 물체 가 지정 한 유형 과 일치 하지 않 으 면 ActiveRecord::SerializationTypeMismatch 이상 을 던 집 니 다.
class User < ApplicationRecord
  serialize :tags, Array
  serialize :favoriates, Hash
  serialize :preferences, JSON
end

Tip: 데이터 베 이 스 는 직렬 화 된 데 이 터 를 저장 하 는 형식 이 가장 좋 습 니 다 text. 일반 텍스트 형식 이 고 충분 합 니 다.Tip: 해시 키 값 을 저장 할 때 사용 하 는 키 가 기호 인지 문자열 인지 주의 하 십시오. 직렬 화 된 값 도 차이 가 있 습 니 다. 같은 문자열 과 기호의 직렬 화 값 도 다 르 고 반 직렬 화 형식 도 일치 합 니 다.
직렬 화 간단 한 유형 을 제외 하고 사용자 정의 직렬 화 형식 대상 도 만 들 수 있 습 니 다.클래스 에서 두 가지 방법 self.dump 을 직렬 화 대상 으로 정의 하고 self.load 반 직렬 화 대상 으로 정의 하면 사용자 정의 대상 의 직렬 화 를 실현 할 수 있다.
class User < ApplicationRecord
  # custom
  serialize :duration_field, Duration
  serialize :task_list_field, TaskList
end

class TaskList
  def self.dump ... end
  def self.load ... end
end

Tip: 서열 화 과정 에서 대상 의 유형 이 일치 하 는 지 판단 해 야 합 니 다. 만약 에 부합 되 지 않 으 면 공식 적 인 예 에 따라 던 져 야 합 니 다 ActiveRecord::SerializationTypeMismatch. 그리고 반 서열 화 전에 저 장 된 값 이 비어 있 지 않 고 요구 에 부합 되 는 지 판단 하여 작성 한 코드 를 더욱 튼튼 하 게 해 야 합 니 다.
직렬 화 는 빠 른 액세스 대상 을 도 울 수 있 는 편리 함 이 많 지만 데이터 베 이 스 를 조회 할 때 복잡 해 지 는 것 이 단점 이다.그래서 쓸 때 써 야 지 함부로 써 서 는 안 된다.또한 postgresql json 유형 과 직렬 화 는 매우 비슷 하기 때문에 이런 상황 에서 직렬 화 를 사용 할 필요 가 없다.
몇 가지 직렬 화 된 적용 상황 을 요약 한다. 규칙 을 정의 할 때 사용자 가 선 호 하 는 것 을 저장 할 때.

좋은 웹페이지 즐겨찾기