ruby-on-rails – 获取Rails 5应用程序以返回JSON API格式

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 获取Rails 5应用程序以返回JSON API格式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试让我的应用程序以小写的camelcase返回以进行最终的 JSON API格式化.

我已经安装了gem’active_model_serializers’并创建了一个新的初始化程序,其中包含以下代码

ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower

然后我有一个返回json的小API,就像所有最好的互联网应用程序一样:

class Api::V1::UsersController < API::V1::BaseController
  def sky
      @user = User.find_by_id(params[:user_id])

      if @user
          obj =  {
              sky: {
                  sectors: @user.sectors,slots: @user.slots
              }
          }

          render json: obj
      else
          raise "Unable to get Sky"
      end
  end

有关API控制器继承模式的更多信息:类API :: V1 :: BaseController<的ActionController :: Base的 问题 在我的API响应中,事情仍然是蛇形的,我在控制台中看到了这个错误[active_model_serializers]渲染了ActiveModel :: Serializer :: Null,但是我的研究让我陷入了死胡同的困境. 任何建议都会非常受欢迎.谢谢!

解决方法

问题是你没有在控制器中调用活动记录序列化程序,因此这些配置设置没有被选中.

解:
在“app / serializers / user_serializer.rb”中创建一个看起来像这样的UserSerializer:

class UserSerializer < ActiveModel::Serializer
  attributes :id

  has_many :sectors
  has_many :slots
end

以及类似结构的SectorSerializer和SlotSerializer,它们具有您想要的所有属性(以下是活动记录序列化程序的getting started docsgeneral syntax docs)

然后在你的控制器中:

class Api::V1::UsersController < API::V1::BaseController
  def sky
    @user = User.includes(:sectors,:slots).find_by_id(params[:user_id])

    if @user
      render json: @user
    else
      raise "Unable to get Sky"
    end
  end
end

哪个会急切加载:插槽和:includes的扇区然后使用camel_case配置选项调用你的UserSerializer.

原文链接:https://www.f2er.com/ruby/265670.html

猜你在找的Ruby相关文章