2016-05-13 5 views
0

私はユーザーテーブルとアドレステーブルを持っています。ユーザーには多くのアドレスがあります。だから私のモデル構造はフィールドをフィールドに含める

class User < ActiveRecord::Base 
    has_many :addresses 
end 

class Address < ActiveRecord::Base 
    belongs_to :user 
end 

私はユーザーの国のコードと一緒に表示したいと思います。私はn+1

User.where(:active => true).includes(:addresses) 
SELECT "users".* FROM "users" where active=true 
SELECT "addresses".* FROM "addresses" WHERE "addresses"."user_id" IN (1, 2) 

を避けるためにincludesを使用しているので期待通りここで私は、アドレスとともに、ユーザーを取得します。しかし私のシナリオでは、DBからすべてのアドレスフィールドを取得したくありません。私はより多くのメモリを消費したくないので、アドレスオブジェクトからはcountry_codeで十分です。その

SELECT "addresses"."country_code" FROM "addresses" WHERE "addresses"."user_id" IN (1, 2) 

等は、我々は上記のシナリオでは、クエリに対処するためのselectオプションを適用することができればだから私の2番目のクエリには良いでしょうか?

+0

のようなアドレスモデルのデータにアクセスするには、あなたのビューに使うよりも、あなたは、クエリのどのような目的についてより多くの情報を含めることができますありますか? –

+0

@AnthonyE Question updated – Selvamani

+0

ありがとうございます@ br3nt私はそれを確認しませんでした。 – Selvamani

答えて

0

これはレコードの配列を作成する必要があるため、テーブルレコードをインクルードすることはできません。この場合には、第2のモデルのアクセスデータを取得するための関連付けを使用します。このような。この

@users_addresses = User.where(:active => true).includes(:addresses) 

のようなあなたのモデルやコントローラのユーザに

この

<% @users.each do |u| %> 
    <% u.addresses.try(:country_code)%> 
<% end %> 
関連する問題