如何在 rails 控制器上渲染两个 json 对象作为响应
How to render two json objects as response on a rails controller
我需要一些帮助我有一个控制器,其操作可以查询两个模型。
现在我需要将它们都作为 json 发送,以便在我的 angular 视图中使用。
在下面的示例中,我应该如何在一个 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
这是 Rails 应用程序中极为常见的要求。这种需求很少局限于单个模型或单个位置。因此,存在各种 gem 来提供这种功能(在许多情况下,不会显着改变 render
行的签名)。
This post 提供了一个很好的清单。就个人而言,我对 active_model_serializers 有很好的体验,对 grape-entity 的体验也可以接受。查看他们的文档并确定最适合您的文档是合理的。
一个简单的方法是用你的对象构建一个散列
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
之类的视图,在其中按照您在 angular 视图中预期的方式呈现对象。您也可以使用 ActiveModelSerializers,继续阅读 https://github.com/rails-api/active_model_serializers
理想情况下,您要做的是将此响应封装到它的对象中,并在您的控制器中进行一次调用,returns 您将得到结果
无需过多赘述,像这样
results = MyComplexFieldsObj.response(params[:id])
render son: results, status: :ok
我需要一些帮助我有一个控制器,其操作可以查询两个模型。 现在我需要将它们都作为 json 发送,以便在我的 angular 视图中使用。
在下面的示例中,我应该如何在一个 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
这是 Rails 应用程序中极为常见的要求。这种需求很少局限于单个模型或单个位置。因此,存在各种 gem 来提供这种功能(在许多情况下,不会显着改变 render
行的签名)。
This post 提供了一个很好的清单。就个人而言,我对 active_model_serializers 有很好的体验,对 grape-entity 的体验也可以接受。查看他们的文档并确定最适合您的文档是合理的。
一个简单的方法是用你的对象构建一个散列
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
之类的视图,在其中按照您在 angular 视图中预期的方式呈现对象。您也可以使用 ActiveModelSerializers,继续阅读 https://github.com/rails-api/active_model_serializers
理想情况下,您要做的是将此响应封装到它的对象中,并在您的控制器中进行一次调用,returns 您将得到结果
无需过多赘述,像这样
results = MyComplexFieldsObj.response(params[:id])
render son: results, status: :ok