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とtransient属性を使用するというアイデアをいじっていましたが、これまでのところ、アイデアやヘルプは大歓迎です。

4

1 に答える 1

2

:includesステートメントを使用して、他のテーブルからすべてのレコードを実際に取得できます

includesは魔法のような構文であり、レコードに関連付けられているすべてのレコードを熱心にロードできます。

例あなたの場合

ユーザーhas_manycars

だからあなたがするなら

@users = User.includes(:cars)

これで、すべてのユーザーレコードが読み込まれ、各ユーザーオブジェクトのすべての車のレコードが熱心に読み込まれます。

したがって、ユーザーオブジェクトをループして、

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

user.cars個別のクエリを実行してユーザーのすべての車をフェッチするのではなく、includes句を使用してロードされたレコードをフェッチします

N+1この手法は、クエリの問題を回避するために広く使用されています

N+1それについてもっと知るためのグーグル

このヘルプを願っています

于 2012-06-23T13:53:43.990 に答える