【问题标题】:Responding JSON according to JSON API in controller根据控制器中的 JSON API 响应 JSON
【发布时间】:2018-07-04 09:28:51
【问题描述】:

我创建了一个 rails api 来公开我的 Bottl 类。这个类有一些解决99Bottles问题的方法。例如,song 方法返回完整的歌词歌曲。我的意图是根据包含该方法响应的JSON API 返回一个 JSON。

require_relative '../bottles_logic/bottles'

class SongsController < ApplicationController
  before_action :set_song, only: [:show, :update, :destroy]

  # GET /songs
  def index
    @songs = ::Bottl.new.song

    render json: @songs
  end
end

使用 Postman,我得到 200 状态和请求负载,但是,由于syntax error (unexpected 'S'),JSON 没有显示。

我的问题是:

  • 这种情况下如何根据JSON API返回一个JSON?
  • 是否需要使用序列化程序来格式化此 JSON?
  • 我想在一个名为 whole_song 的 json 条目中返回歌词,所以它必须是一个属性,对吧?

【问题讨论】:

  • 嘿,你能分享一下错误日志的其余部分吗?你应该在你的服务器日志中找到它。谢谢!
  • 'Started GET "/songs" for 127.0.0.1 at 2018-07-04 09:22:52 -0300 由 SongsController#index 处理为 / 完成 200 OK in 1ms(查看:0.2ms | ActiveRecord:0.0ms)'
  • 感谢分享这部分日志!您对日志的其余部分有看法吗?准确地说,syntax error (unexpected 'S') 行和紧随其后的行?
  • 该错误仅出现在 Postman“漂亮”部分。在“原始”部分,我可以看到完整的有效负载,但它不会呈现为 json

标签: ruby-on-rails json ruby


【解决方案1】:

您在@songs 中存储了什么数据类? 您必须将哈希传递给渲染方法,例如,render json: { key: value }。 如果@songs 是您的类的对象,您必须尝试使用​​Serializer 或@songs.as_json

【讨论】:

  • '@songs' 是一个字符串。那么我是否希望它以“whole_song”键呈现,所以我必须运行 render json: { whole_song: '@songs '},对吗?使用 Serialilzer 或'@songs.as_json',我想让它显示为 whole_song 属性。如何创建属性?
  • > 所以我希望它在“whole_song”键中呈现,所以我必须运行 render json: { whole_song: '@songs '},对吗?是的。如果@songs 是字符串,则不需要创建属性。 render json: { whole_song: @songs }
  • 有效!非常感谢你!但它是根据 JSON API 吗?我想我必须在 JSON 响应中添加其他字段
  • 对您来说最简单的方法是将键添加到哈希中。 render json: { whole_song: @songs, album: @album, artist: @artist } 另外,您可以使用局部变量而不是实例变量。
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 2022-01-03
  • 2017-01-28
  • 1970-01-01
相关资源
最近更新 更多