0
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 和瞬态属性的想法,但到目前为止还没有运气,非常感谢任何想法/帮助。

4

1 回答 1

2

您实际上可以使用:includes语句从另一个表中检索所有记录

includes是一种神奇的语法,您可以在其中急切加载记录的所有相关记录。

示例在您的情况下

用户 has_many car

所以如果你这样做

@users = User.includes(:cars)

现在这将加载所有用户记录,并将为每个用户对象预先加载所有汽车记录

因此,如果您遍历用户对象并执行

<% @users.each do |user| %>
  <%= user.cars %>
<%end%>

user.cars不会触发单独的查询来为用户获取所有汽车,而是会获取那些使用该includes子句急切加载的记录

这种技术被广泛用于避免N+1查询问题

谷歌N+1了解更多信息

希望这个帮助

于 2012-06-23T13:53:43.990 回答