如何仅将我的模型中的两个字段呈现为JSON?

时间:2018-01-30 22:28:46

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

我有一个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模型中仅渲染两个字段的正确方法是什么?

1 个答案:

答案 0 :(得分: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