Использование сериализатора внутри рельсов концерна
Я использую сериализатор для форматирования 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