如何使用Jbuilder发送Games与Servers关联表的服务器ID数组?
解决Jbuilder返回服务器ID数组的问题
我来帮你搞定这个Jbuilder的小问题~你之前的写法没抓到核心:Jbuilder默认会序列化完整的对象,所以得明确告诉它只提取ID值。这里有几种简单好用的方案:
方法1:用pluck(推荐,性能最优)
pluck会直接从数据库查询服务器ID,不会加载完整的Server对象,效率拉满,代码也最简洁:
json.servers game.servers.pluck(:id)
这样直接就能输出纯ID数组,比如[2, 5, 7]这种格式。
方法2:用map转换对象数组
如果需要先对服务器对象做一些额外处理,再提取ID,可以用map:
json.servers game.servers.map(&:id)
这个方法会先加载所有关联的Server对象,再把它们转换成ID数组,适合有前置处理需求的场景。
方法3:修正array!的写法
你之前尝试的array!写法逻辑不对,正确的打开方式是在块里返回每个服务器的ID:
json.servers do json.array!(game.servers) { |server| server.id } end
不过这种写法比前两种繁琐,一般优先用前两种方案更省心。
本质上你只需要把服务器集合转换成ID数组,再赋值给json.servers,Jbuilder会自动帮你序列化为JSON数组格式~
内容的提问来源于stack exchange,提问作者anonn023432
相关产品推荐
相关产品推荐

