Rails 仅将模型嵌套关联中的某些字段呈现为 json

Posted

技术标签:

【中文标题】Rails 仅将模型嵌套关联中的某些字段呈现为 json【英文标题】:Rails rendering only certain fields in nested associations of a model as json 【发布时间】:2021-07-09 03:03:35 【问题描述】:

我正在构建一个 API,它有一个工作室(电影),一个工作室有电影,电影有角色,也有流派。我已经构建了所有模型,它们似乎按预期工作。现在我正在尝试在我的 MoviesController 中构建所有电影的 GET(索引),但我遇到了问题。

我的 MoviesController 如下:

class MoviesController < ApplicationController
def index
    render json: Movie.all, only: [:title, :date_released, :score], include: [:studios, :characters]
end
end

通过这种方式,我可以将我所有的电影渲染为 json,并且只获得字段标题、日期_发布和分数,并渲染相关字段 Studio 和 Characters。我的问题是工作室和角色完全渲染自己(id,name,created_at,updated_at)。我只想渲染 Studio 的名称和角色名称,而不是他们的 id 或创建日期。我未能将相同的“仅:[name:]”应用于工作室或角色。我怎样才能做到这一点?

感谢您的帮助。如果您对如何改进我的代码有任何建议,请说出来。

【问题讨论】:

【参考方案1】:

试试这个

render :json => Movie.all, only: [:title, :date_released, :score], include: studios: only: :name, characters: only: :name

【讨论】:

谢谢,我现在可以睡觉了(这里是凌晨 2 点)。它完美无缺,将服务于我的目的。互联网上关于这些问题的信息很少。救了我!

以上是关于Rails 仅将模型嵌套关联中的某些字段呈现为 json的主要内容,如果未能解决你的问题,请参考以下文章

如果 Rails 表单中的另一个字段为空,则验证嵌套字段

Rails cocoon嵌套字段,在编辑表单上呈现每个字段旁边的现有图像

Rails:查找嵌套关联为空的记录

命名空间模型中的 Rails 关联

Rails 4 - 根据嵌套形式的第一个选择菜单中的选择动态填充第二个选择菜单

Rails视图中的嵌套模型