User
first_name: "Johnny"
age: 15
Car
name: "Mazda"
Car
name: "BMW"
我希望结果看起来像
[ {"first_name": "Johnny", "age": 15, cars: [ { "name": "Mazda" }, { "name" : "BMW" } ] } ]
是否可以在Rails中执行此操作?到目前为止,我可以通过输入johnny.cars
来获取用户汽车,但我希望数据结构也能保存parent
的值。
我正在玩弄使用named_scopes和瞬态属性的想法但到目前为止没有运气,我们非常感谢任何想法/帮助。
答案 0 :(得分:2)
您实际上可以使用:includes
语句
includes
是一种神奇的语法,您可以在其中急切加载记录的所有关联记录。
示例在您的情况下
用户has_many汽车
所以如果你这样做
@users = User.includes(:cars)
现在这将加载所有用户记录,并将为每个用户对象加载所有汽车记录
所以如果你遍历用户对象并执行
<% @users.each do |user| %>
<%= user.cars %>
<%end%>
user.cars
不会触发单独的查询来获取用户的所有汽车,而是使用includes
子句获取那些急切加载的记录
此技术广泛用于避免N+1
查询问题
谷歌让N+1
了解更多信息
希望这个帮助