如何在rails控制器上呈现两个json对象作为响应

时间:2016-08-05 16:17:30

标签: ruby-on-rails json ruby ruby-on-rails-3 controller

我需要一些帮助我有一个控制器,其中有一个动作可以查询两个模型。 现在我需要将它们作为json发送,以便在我的角度视图中使用。

在下面的示例中,我应该如何在一个json响应中发送“complex”及其“fields”?

实施例

def complexes_and_fields
  complex = Complex.find(params[:id])
  search_params = {complex_id: complex._id}
  fields = Field.where(search_params)
  if !complex.nil?
    render json: ???.to_json, status: :ok
  else
    render json: { error_description: 'no complex found' },status: :bad_request
end

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用对象构建哈希

complex = Complex.find(params[:id])
search_params = {complex_id: complex._id}
fields = Field.where(search_params)

render json: { complex: complex, fields: fields, search_params: search_params }, status: :ok

另一种方法是使用some_view.json.erb这样的视图来渲染对象,就像在角度视图中一样。您也可以使用ActiveModelSerializers,阅读https://github.com/rails-api/active_model_serializers

理想情况下,您要做的是将此响应封装到其对象中,并在控制器中进行一次调用,返回结果

没有像这样的太多细节

results = MyComplexFieldsObj.response(params[:id])
render son: results, status: :ok

答案 1 :(得分:0)

这是Rails应用程序中非常常见的要求。这种需求很少局限于单个模型或单个位置。因此,存在各种宝石来提供这种功能(在许多情况下,不会大幅改变render行的签名。)

This post提供了一个很好的列表。就个人而言,我对active_model_serializers和葡萄实体的可接受经验有很好的体验。审核他们的文档并确定哪种文档最适合您是合理的。