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

ruby-on-rails – 如何使用camelcased密钥名称从Rails返回JSON

发布时间:2020-12-17 04:02:51 所属栏目:百科 来源:网络整理
导读:我正在构建一个带有Rails后端的JS应用程序,为了不混淆蛇和骆驼的情况,我想通过从服务器返回camelcase密钥名称来规范化它.因此,user.last_name在从API返回时将返回user.lastName. 我该如何实现这一目标?谢谢! 编辑:添加控制器代码 class Api::V1::UsersCon
我正在构建一个带有Rails后端的JS应用程序,为了不混淆蛇和骆驼的情况,我想通过从服务器返回camelcase密钥名称来规范化它.因此,user.last_name在从API返回时将返回user.lastName.

我该如何实现这一目标?谢谢!

编辑:添加控制器代码

class Api::V1::UsersController < API::V1::BaseController
  # authorize_resource
  respond_to :json,only: [:index]
  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
end

解决方法

我这样做的方法是使用ActiveModelSerializer和json_api适配器:

在您的Gemfile中,添加:

gem 'active_model_serializers'

创建一个新文件/config/initializers/ams.rb,其中包含:

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

您的控制器操作应如下所示:

class ApiController < ApplicationController
  def sky
    @user = User.find_by_id(params[:user_id])

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

现在您需要创建一个序列化程序.首先,创建一个新目录app / serializers /.

接下来,创建一个新的序列化程序app / serializers / user_sky_serializer.rb,其中包含:

class UserSkySerializer < ActiveModel::Serializer
  attributes :sectors,:slots
end

结果类似于您在obj哈希中描述的内容,但所有属性键都将使用jsonapi标准在camelCase中呈现.

(编辑:李大同)

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

    推荐文章
      热点阅读