【问题标题】:How do I render only two fields from my model as JSON?如何仅将模型中的两个字段呈现为 JSON?
【发布时间】:2018-01-30 22:28:46
【问题描述】:

我有一个 Rails 5 应用程序和一个具有许多属性的 Person 模型,包括

id
name

我想从我找到的人员列表中呈现这两个属性。我试过这个

        format.js {
      render :json => @people.to_json(include: [:id, :name])
    }

其中“@people”是一个 Person 对象数组,但上面的结果是一个

undefined method `serializable_hash' for 16:Integer

错误。从我的 Person 模型中只呈现两个字段的正确方法是什么?

【问题讨论】:

标签: ruby-on-rails json field ruby-on-rails-5


【解决方案1】:

您应该使用only: 而不是include:

format.js {
  render :json => @people.to_json(only: [:id, :name])
}

虽然only 只会为您提供该模型所需的属性,但include 旨在包括模型的其他关联! (关联为belong_tohas_many 等)

无论如何,还有另一种方法可以在模型查询中使用select 获得相同的结果。

@poeple = Person.select(:id, :name).where(....) 

然后只返回to_json -> 你不需要排除任何属性,因为你只会首先获得你想要的属性。

** 只有在其他情况下不需要其他属性时,第二种方法才有效。例如,如果您想返回模型的完整属性列表(如果它不是 json)

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2021-12-15
    • 2012-03-09
    相关资源
    最近更新 更多