2017-09-22 4 views
0

남자! 상황에 가장 적합한 방법을 찾고 있는데 아래에 설명되어 있습니다.레일즈 액티브 모델은 한 번의 동작에 대해 서로 다른 직렬화를 적용하는 가장 좋은 방법을 직렬화합니다.

두 가지 모드가있는 페이지가 있습니다. 예 : 그리드 및리스트 모드. 두 모드 모두 두 가지 다른 표현이 필요합니다.

현재, 어떤 시리얼 라이저를 적용해야 하는지를 감지하기 위해 현재 하나의 라우트 조치 및 플래그 매개 변수 ('미리보기'와 같은 smth)가 있습니다.

나는 그것을하는 것이 최선의 방법은 아니라고 생각합니다. 상상해 봅시다. 앞으로 두 가지 다른보기 모드가 추가 될 것입니다. 그래서 어떤면에서는 모든 방법을 관리해야합니다.

감사합니다.

답변

1

가드 스타일 조건을 사용할 수도 있고 나중에 별도의 방법으로 이동할 수도 있습니다. 그것은 당신이 의심 할 경우를 대비하여 전적으로 괜찮습니다.

serialize = SerializerOne if a 
serialize = SerializerTwo if b 
... 
serialize = SerializerN if n 

render json: result, each_serializer: serialize 
0

나는 당신이 간단한 규칙에 따라 동적으로 원하는 시리얼 클래스를로드 할 const_get를 사용하여이 작업을 수행 할 수 있기를 바랍니다.

모드 및 그리드 용으로 두 개의 직렬기를 사용할 수 있습니다.
같은 모드라는 동일한 공간에서 이러한 만들기

시리얼 라이저/모드/grid_serializer.rb (모드 : GridSerializer)
시리얼 라이저/모드/list_serializer.rb (모드 : ListSerializer) 컨트롤러 액션에서

당신 당신의 PARAMS 미리보기 값 "grid"을 받고, 당신은

serializer = Mode.const_get(params["preview"].camelcase + "Serializer") 

나는이 도움이 되었으면 좋겠를 수행하여 시리얼 클래스를로드 할 수 있습니다. 감사.