4

질문 :ActiveModel :: Serializers에는 Rails 컨트롤러처럼 이름 공간이있는 이름 (중첩)을 사용할 수 있습니까?

내 컨트롤러와 함께이 작업을 수행 :

class Api::Product::V1::LicenseController < ApplicationController 

가 왜 내 시리얼 라이저와 함께이 작업을 수행 할 수

? (또는 I 수?)

class Api::Product::V1::LicenseSerializer < ActiveModel::Serializer 

CONTEXT :

내가 여러 컨트롤러/단일 모델에 해당 경로를 가지고있다.

그리고 컨트롤러마다 1 대 1에 해당하는 모델마다 여러 개의 시리얼 라이저가 있어야합니다.

ActiveModel::Serializers

는이 같은 컨트롤러에서 시리얼을 지정할 수 있습니다 :
render :json => @license_token, :serializer => LicenseSerializer 

가 왜 나는 또한이 작업을 수행 할 수없는 이유는 무엇입니까?

render :json => @license_token, :serializer => Api::Product::V1::LicenseSerializer 

나는 그들이 일을 알고에도 불구하고, 이와 같은 복합 이름의 추함을 피하기 위해 노력하고 있어요 :

  • ProductAlphaLicenseSerializer
  • ProductBravoLicenseSerializer
  • ProductCharlieLicenseSerializer

각을 내 모델의 여러 API를 지원합니다. 시리얼 라이저를 에이스. 각 모델은 각각의 해당 시리얼 라이저에 의해 다르게 사용됩니다.

+0

안녕하세요 크리스, 네가 무슨 짓을했는지 궁금 하네. 또한 현재 active_model_serializers를 네임 스페이스로 구성하려고합니다. 문제는 방금 네임 스페이스 및 클래스 이름 대신 클래스 이름을 사용하면 작동하지 않습니다. 그래서 예제 :'render : json => @license_token, : serializer => Api :: Product :: V1 :: LicenseSerializer'는 제게 맞지 않습니다.'render : json => @license_token, : serializer => LicenseSerializer' – Andy

답변

3

오류 (있는 경우)에 대해 설명하면 도움이 될 수 있습니다. 액티브 모델 시리얼 라이저에 관해서도 비슷한 문제가있었습니다. 설명서에 따르면 AMS는 모델 클래스를 기반으로 app/serializers 경로의 자동 시리얼 라이저 조회 만 수행하므로 네임 스페이스가있는 컨트롤러는 시리얼 라이저 조회에 영향을주지 않습니다.

수동으로 원하는 serializer 클래스를 지정하지 못하는 것 같지 않습니다. 실제로 네임 스페이스 컨트롤러 내에서 LicenseSerializer을 사용하면 모듈의 namespaced 클래스를 찾아야합니다. 레일즈 클래스 로딩이 자동으로 해결되도록 적절한 네임 스페이스에서 serializer를 구성 해 보았습니까? 예 : Api::Product::V1::LicenceSerializerapp/serializers/api/product/v1/license_serializer.rb에 넣으시겠습니까?

레일과 통합되는 roar-rails gem을보고 대리자 패턴을 사용하여 양방향 JSON/XML/JSON + HAL 처리를 지원하는 ruby ​​web framework agnostic ROAR gem을 사용할 수도 있습니다. 직렬화에 대한 제어처럼 jbuilder/jsonify를 얻지는 못할 것이라는 점을 알아 두십시오. 그러나 AMS를보고 있다면 세부 사항에서 어느 정도 향상되기를 원합니다. ROAR을 사용하면 선택한 표현 자 형식을 기반으로 한 균일 한 API를 얻을 수 있으며 진정한 하이퍼 미디어 API에 훨씬 더 가깝게됩니다.

표현 자/ROAR 접근법의 근거 중 일부는 here, herehere입니다.

수정 : 내 to_json 구현을 고려할 수도 있습니다. 모든 현재 JSON 시리얼 라이저 라이브러리의 성능과 유연성은 내 프로젝트에서 중요한 문제였습니다. 모든 대안을 실험 한 후에는 깨끗한 JSON DSL을 개발하고 Oj 작성자와 협력하여 뛰어난 성능의 문자열 버퍼/스트림 마샬링 API를 개발했습니다. 내 to_json gem은 예산 호스팅 서버에서 초당 18,000 개의 복잡한 객체를 쉽게 직렬화 할 수 있으며 생성 할 수있는 JSON 구조에 대한 제한이 없습니다.

+0

너, 앤드류! 적절한 네임 스페이스에서 serializer를 구성하는 것에 대한 귀하의 의견은 필자가 필요로하는 관점의 변화 일뿐입니다. – Chris

+0

ROAR에 대한 팁을 보내 주셔서 감사합니다. 나는 AMS에 상당히 헌신적이다. 기본 설정이 Ember.js와 원활하게 작동하기 때문이다. 그러나 나는 ROAR을 확실히 조사 할 것이다. – Chris

+0

@Chris 결국 당신을 위해 무엇이 효과가 있었습니까? 조직 선택기 부분이 나를 위해 작동하지 않았다 .. – geoboy