You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails API模式下show动作如何同时返回两组JSON数据

正确实现方案

方案1:平级返回两组独立数据

如果需要前端分别拿到post主数据和post_items关联数据,直接将两组数据封装到同一个Hash中单次render即可:

def show
  post = Post.find(params[:id])
  render json: {
    post: post,
    post_items: post.post_items
  }, status: :ok
end

方案2:嵌套返回关联数据

如果需要post_items作为post的嵌套属性返回,使用Rails内置的include参数即可:

def show
  post = Post.find(params[:id])
  render json: post, include: :post_items, status: :ok
end

性能优化建议

查询时预先加载关联数据,避免产生N+1查询问题:

def show
  # 预先加载post_items,仅触发两次SQL查询
  post = Post.includes(:post_items).find(params[:id])
  render json: { post: post, post_items: post.post_items }, status: :ok
end

旧方案报错原因说明

  • 两次调用render json触发AbstractController::DoubleRenderError:Rails规定单个Controller动作仅可执行一次render/redirect操作,且调用render后不会自动终止后续代码执行,多次调用必然报错。
  • respond_to方法不存在:Rails API模式默认未引入responders模块,即使引入该模块,同格式下定义多个format.json也只会执行第一个,无法实现同时返回两组数据的需求。

内容的提问来源于stack exchange,提问作者Beginner Professional

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:36:02