加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:43:36 所属栏目:百科 来源:网络整理
导读:我正在尝试让我的应用程序以小写的camelcase返回以进行最终的 JSON API格式化. 我已经安装了gem’active_model_serializers’并创建了一个新的初始化程序,其中包含以下代码: ActiveModelSerializers.config.adapter = :json_apiActiveModelSerializers.conf
我正在尝试让我的应用程序以小写的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 docs和general 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读