在Rails中渲染JSON时包含关联的模型

Hom*_*ith 43 json ruby-on-rails

现在我有这条线:

 render json: @programs, :except => [:created_at, :updated_at]
Run Code Online (Sandbox Code Playgroud)

但是,由于程序属于公司,我希望显示公司名称而不是公司ID.

如何在渲染程序时包含公司名称?

Nob*_*ita 72

这样的事情应该有效:

render :json => @programs, :include => {:insurer => {:only => :name}}, :except => [:created_at, :updated_at]
Run Code Online (Sandbox Code Playgroud)

  • 我还是不明白...有关如何做到这一点的任何文件? (3认同)

Sea*_*lls 15

我从控制器方法渲染包含json的json时得到了相同的"无法克隆符号文件"错误.像这样避免它:

render :json => @list.to_json( :include => [:tasks] )
Run Code Online (Sandbox Code Playgroud)


Arn*_*len 9

考虑使用jbuilder以可维护的方式包含嵌套模型:

# /views/shops/index.json.jbuilder
json.shops @shops do |shop|

  # shop attributes to json
  json.id shop.id
  json.address shop.address

  # Nested products
  json.products shop.products do |product|
    json.name product.name
    json.price product.price
  end

end  
Run Code Online (Sandbox Code Playgroud)


Abr*_*ram 9

您也可以在模型级别执行此操作.

program.rb

  def as_json(options={})
    super(:except => [:created_at, :updated_at]
          :include => {
            :company => {:only => [:name]}
          }
    )
  end
end
Run Code Online (Sandbox Code Playgroud)

现在在您的控制器中:

render json: @programs
Run Code Online (Sandbox Code Playgroud)

  • 优雅的解决方 (2认同)