이미 질문이 있으며 this is a open issue regarding AMS not handling namespaces too efficiently (이 버전 관리 방식에서 사용됨)을 알고 있지만 현재 제약 조건 내에서 올바른 위치에 있는지 확인하고 싶습니다.active_model_serializers를 사용하여 API 버전 관리를 구현하는 올바른 방법
# config/initializers/active_model_serializer.rb
ActiveModelSerializers.config.serializer_lookup_enabled = false
하지 않도록 기본 시리얼 조회 (어쨌든 작동하지 않았다) :
는 지금 내가 레일 5 AMS 0.10.1을 사용하고, 그래서 다음과 같은했다
# app/controllers/application_controller.rb
class ApplicationController < ActionController::API
def get_serializer(resource, options = {})
unless options[:each_serializer] || options[:serializer] then
serializer = (self.class.name.gsub("Controller","").singularize + "Serializer").constantize
resource.respond_to?(:to_ary) ? options[:each_serializer] = serializer : options[:serializer] = serializer
end
super(resource, options)
end
end
기본적으로 직렬 변환기가 검색되는 방식을 무시합니다.
# app/controllers/api/v2/api_controller.rb
module Api::V2
class ApiController < ApplicationController
...
# app/controllers/api/v2/users_controller.rb
module Api::V2
class UsersController < ApiController
...
지금
# app/serializers/api/v2/user_serializer.rb
module Api::V2
class UserSerializer < ActiveModel::Serializer
...
이
ActiveModel::Serializer.serializer_for(object)
같은 일들이 작동하지 않습니다, 그래서 나는 또한 원숭이는 API 버전을 설정
example.metadata[:api_version]
를 사용하여 내 요구 사양을 패치했다 : 내 컨트롤러와 직렬이 같다 각 테스트를하기 전에 예제를 설정하지 않은 경우 발생시키고 오류가 발생합니다.
그래서 :
- 는 더 나은 방법이 문서화되어 있습니까?
- 이 부분이 정확합니까?
- 이 방법을 사용하면 문제가 더 커질 수 있습니까?
- 어떻게 개선 할 수 있습니까?
입력 해 주셔서 감사합니다. 나는 일을 조금 건조시키는 일을했습니다. 'get_serializer'는 항상 AMS에 의해 호출되며 정의 된 규칙을 따르지 않으면'render json : @object, serializer : Namespaced :: Unconventional :: ObjectSerializer' 만 사용해야합니다. –