【问题标题】:How to always return a JSON array for single result in Ruby On Rails?如何在 Ruby On Rails 中始终为单个结果返回 JSON 数组?
【发布时间】:2018-12-09 12:39:50
【问题描述】:

在 Ruby On Rails 中始终从 API 控制器返回 JSON 数组的最简单或预期的方法是什么?

假设我有以下控制器操作:

def index
  render json: Entry.all.includes(:user).to_json(include: :user) if current_user.has_role?(:administrator)
  render json: Entry.find_by(user: current_user).to_json(include: :user)
end

返回条目列表。有时结果只有一个条目,因此to_json() 不会创建 JSON 数组而是创建 JSON 对象。

这会使 API 文档和客户端中的实现等一切变得复杂,因为我们必须测试空结果、单个结果和数组结果。

这里怎么可能总是返回一个 JSON 数组?

堆栈:Ruby 2.5.3;导轨 5.2.2

【问题讨论】:

    标签: ruby-on-rails json ruby


    【解决方案1】:

    尝试更改此设置

    render json: Entry.find_by(user: current_user).to_json(include: :user)
    

    render json: Entry.where(user: current_user).to_json(include: :user)
    

    find_by 返回一个对象,而 where 一个 ActiveRecord::Relation

    【讨论】:

    • 也许他想要一个只有一个元素的数组,如果是这种情况,他应该使用 Entry.where(user: current_user).limit(1) 将生成与 Entry.find_by 相同的查询(user: current_user),但只会返回 ActiveRecord::Relation 中的一个对象。
    • 谢谢。我只是忘记了find_by 只是第一个结果。
    猜你喜欢
    • 2015-04-20
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多