Использование сериализатора внутри рельсов концерна

Я использую сериализатор для форматирования json ответа моего rails-api проектора. Я использую вопрос для форматирования окончательного ответа. Мои фрагменты кода следующие

entry_controller.rb

class EntriesController < ApplicationController
  include Response

  def index
    @entries = @current_user.entries
    json_response(@entries)
  end
end

проблемы / response.rb

module Response
  def json_response(response, error = nil, message = 'Success', code = 200)
    render json: {
        code: code,
        message: message,
        error: error,
        response: response
    }
  end
end

application_serializer.rb

class ApplicationSerializer < ActiveModel::Serializer
end

entry_serializer.rb

class EntrySerializer < ApplicationSerializer
  attributes :title, :content, :is_encrypted, :entry_date
end

В записях #index, если я использую json_response(@entries), мой окончательный ответ на запрос не форматируется, и каждая запись такая же, как в базе данных. вместо этого, если я использую render json: @entries, Я получаю согласно сериализатору. Я хочу использовать метод беспокойства json_response(@entries) вместе с сериализаторами. Может ли кто-нибудь предложить способ использования сериализаторов в методах обработки в общем виде, поскольку несколько контроллеров используют один и тот же метод обработки. Заранее спасибо.

2 ответа

Что-то связанное с параметрами сериализатора - это то, что вы хотите настроить в своем ответе.

class EntriesController < ApplicationController
      include Response

      def index
        @entries = @current_user.entries
        render json: @entries, serializer_params: { error: nil, message: "Success", code: 200}
      end
    end

class EntrySerializer < ApplicationSerializer
  attributes :title, :content, :is_encrypted, :entry_date
  params :error, :message, :code

  def attributes
    super.merge(:error, :message, :code)
  end

end

Я не уверен, что полностью понимаю ваш вопрос, но я не верю render :json звонки to_json рекурсивно, если ему дан хеш, как в этом случае. Так что вы можете искать что-то вроде этого в вашей заботе:

  module Response
    def json_response(response, error = nil, message = 'Success', code = 200)
      render json: {
        code: code,
        message: message,
        error: error,
        response: response.to_json
      }
    end
  end
Другие вопросы по тегам