在关注范围内使用序列化程序

时间:2017-11-10 17:50:49

标签: ruby-on-rails json ruby serialization activesupport-concern

我正在使用序列化程序来格式化我的rails-api投影机的json响应。 我正在使用关注来格式化最终响应。 我的代码片段如下

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(@条目) ,我的最终请求回复不是格式化,每个条目都在数据库中。相反,如果我使用render json: @entries。我按照序列化程序获取。我想使用关注方法json_response(@entries)和序列化程序。有人可以建议一种在通用方式中在关注方法中使用序列化器的方法,因为多个控制器使用相同的关注方法。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

与序列化程序参数相关的内容是您要自定义响应的内容。

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

答案 1 :(得分:0)

我不确定我是否完全理解您的问题,但如果给出哈希值,我不会相信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