【发布时间】:2020-04-07 13:43:17
【问题描述】:
一个小队有很多玩家。如果我尝试创建一个新小队,没关系,但它不会返回包含控制台中包含的球员的 JSON。
这是我在控制器上创建 def 的代码:
def create
squad = Squad.create(squad_params)
render json: squad
end
这是我在模型中的序列化器:
def serializable_hash(opts)
super(opts.merge(only: [:id, :name, :user_id], include: :players))
end
这是我在控制台返回的 json:
{id: 26, name: "gol", user_id: 1, players: Array(0)}
id: 26
name: "gol"
players: []
user_id: 1
__proto__: Object
如您所见,玩家数组为空。实际上它不是空的,但在控制台似乎是空的。
我用include(:players) 尝试过类似的操作,但没有成功:
def create
squad = Squad.create(squad_params)
render json: squad.include(:players)
end
你知道如何在创建方法中渲染小队 json 包含的玩家吗?
【问题讨论】:
-
squad创建时是否已经关联了玩家? -
@SebastianPalma 是的,当然。 Squads has_many: 球员和球员 belongs_to:squad。而且我对创建新小队没有任何问题。我只需要添加一些rails控制器。现在我在控制器上渲染了 json:squad,它运行良好,但我只需要添加类似 json:squad.include(players) 的东西,但我不知道如何使用正确的语法来做到这一点。
-
是的,我明白了。但是您想从创建动作中返回小队及其所有相关球员,不是吗?如果是这样,当你创建一个新小队时,它是否已经有相关的球员?如果是这样,请尝试使用
squad.as_json(include: :players)。 -
我试过这样:
def create squad = Squad.create(squad_params) squad.as_json(include: :players)但甚至没有返回空的数据。它正在与球员一起创建一个新小队,但在创建小队后,我需要在控制台上捕捉球员。如果我说只渲染:squad 返回数据但没有玩家。但也有与小队相关的球员。只是我需要将它们显示为 json。我希望我能清楚地解释自己。 -
您是有意删除了
render json:部分还是没有将其复制到评论中?在控制台中尝试。
标签: ruby-on-rails json ruby serialization rendering