【发布时间】:2016-10-20 13:15:51
【问题描述】:
我正在尝试在 Rails API 应用程序中的 API 返回的 JSON 对象上使用 Rail 的序列化程序。我需要进行身份验证、摄取 API、过滤数据并重新广播过滤后的数据。无需查看。
为了过滤数据,我正在尝试实现序列化程序 - 很明显我没有正确设置它。我可以看到它正在工作并且就位,因为它在它返回的数据前面添加了初始对象(请参阅下面的数据:序列化对象以kobo_data 开头)。但它正在返回所有数据字段,而不仅仅是我试图调用的字段。在这种情况下,我试图只返回字段prikey,但它正在返回所有数据字段。
我尝试在与此类似的线程(ActiveModel::Serializer in Rails - serializer methods ignored in JSON result、rails active model serializer not doing anything、Using ActiveModel::Serializer in Rails - JSON data differs between json and index response)中解决问题,但由于我没有 .html 视图,我想知道这是否与上一个链接中提到的问题。但是我完成的另一个教程 (https://thesocietea.org/2015/03/building-a-json-api-with-rails-part-2-serialization/) 在没有视图的 Rails-API 应用程序中使用了序列化,所以我猜它不是。
关于我做错了什么以及如何解决它有什么建议吗?
型号:
class KoboApi < ActiveRecord::Base
require 'rest_client'
USERNAME = ENV['KOBO_API_USER']
PASSWORD = ENV['KOBO_API_PWD']
SURVEY = ENV['KOBO_API_SURVEY']
# API_BASE_URL = "https://kc.kobotoolbox.org/api/v1/"
API_BASE_URL = "https://sg.smap.com.au/api/v1"
def self.get_api_info
uri = "#{API_BASE_URL}/data/#{SURVEY}?format=json"
rest_resource = RestClient::Resource.new(uri, USERNAME, PASSWORD)
response = rest_resource.get
JSON.parse response
end
end
控制器
class KoboDataController < ApplicationController
def index
@kobo_info = KoboApi.get_api_info
render json: @kobo_info
end
end
应用控制器
class ApplicationController < ActionController::API
include ActionController::Serialization
end
kobo_api_serializer.rb
class KoboApiSerializer < ActiveModel::Serializer
attributes :prikey
end
宝石文件
source 'https://rubygems.org'
gem 'active_model_serializers', '~> 0.8.3'
gem 'rest-client'
gem 'pg'
gem 'rails', '4.2.5.1'
gem 'rails-api'
gem 'spring', :group => :development
# gem for environment variables
gem 'dotenv-rails', :groups => [:development, :test]
gem 'figaro'
数据返回
{"kobo_data":[{"prikey":"1","Upload Time":"2016-06-17 11:11:38.802+00","Version":"1","Complete":"t","Survey Notes":"","Location Trigger":"","deviceid":"webworm"....[data truncated]
【问题讨论】:
-
渲染 json:ActiveModelSerializers::KoboApiSerializer.new(kobo_info, {})
-
谢谢 - 用你的建议替换我的渲染 json 行会给我一个
uninitialized constant KoboDataController::ActiveModelSerializers错误。 -
是否包含活动模型序列化程序 gem?尝试只渲染 json:KoboApiSerializer.new(kobo_info, {})
-
我遇到了与我的数据库和数据相关的其他问题,这些问题即使在尝试此操作后也使我的应用程序无法工作 - 在我发布的答案中详细描述了我的数据库问题。如果我的数据库表名没有问题,我想这会解决它。稍后将尝试确认。再次感谢!
标签: ruby-on-rails json active-model-serializers