Rails,包括json渲染中的关系

时间:2013-08-12 22:07:44

标签: ruby-on-rails ruby json

我有以下代码,它返回一个包含@ admin_user.companies:

的数据的json
@admin_user = User.find_by_email(email)

render :json=>{:status=>{:code=>200,:token=>@admin_user.authentication_token,
    :user=> @admin_user,
    :companies => @admin_user.companies }}  

每家公司也有很多“地点”。如何在json中的@ admin_user.companies中包含每个公司的所有位置?

2 个答案:

答案 0 :(得分:7)

传统方式是使用

render json: @admin_user.companies, include: :locations

(有关更多选项,请参阅#as_json。)

您不需要在JSON中包含状态代码,因为它已经在HTTP标头中。因此,以下内容可能会使您接近所需。

render :json => @admin_user,
  :include => {
    :companies => { :include => :locations },
  },
  :methods => :authentication_token

旁注

这只是一个例子。您必须配置:include:methods才能获得您想要的内容。要获得更细粒度的控制,请查看JBuilderRABL

答案 1 :(得分:0)

另一种方法是使用jbuilder,它允许您对JSON的生成方式进行更精细的控制:

  • jbuilder gem添加到您的应用
  • 使用控制器中的JBuilder.encode生成JSON
  • 或者,在.json.jbuilder目录
  • 中创建views个模板