2017-11-10 8 views
1

2つの異なるモデルスルーループ:レール:私は基本的な検索を実現していると私はこのような結果を通してループしてる

ビュー/アイテム/ search.html.erbまた、私が持っている

<% if @items.present? %> 
     <% if @items %> 
     <% @items.each do |item| %> 
      <%= link_to item.title, item %> 
       <%= number_to_currency item.price %> 
      <% end %> 
     <% end %> 
    <% end %> 

class Account < ApplicationRecord 
    belongs_to :user 
end 

class Item < ApplicationRecord 
    belongs_to :user 
    belongs_to :account 
end 

class User < ApplicationRecord 
    has_one :account, autosave: true 
    has_many :items 
end 
:住所、電話番号など

モデル団体に関するすべての詳細が含まれていbelongs_to :user

また、はaccountsitemsのテーブルの下にもあります。

私は結果に特定の項目のaccountの情報を示したいと思います。 2つの異なるモデルをループして、希望の結果を表示するにはどうしたらいいですか?これはあなたの入社アカウントテーブル内の各列を求めるSQLクエリを与えるだろう

Account.joins(user: :items).where(items: { id: item_id }) 

答えて

2

あなたは次のように、アカウントとユーザーとの間の関連付けを渡して、ユーザーおよびアイテムとの関連joinsを使用することができますaccounts.user_idとusers.idとitem_idに等しいIDを持つ各項目レコードを求め、users.idでitems.user_id:

SELECT "accounts".* 
FROM "accounts" 
INNER JOIN "users" 
ON "users"."id" = "accounts"."user_id" 
INNER JOIN "items" 
ON "items"."user_id" = "users"."id" 
WHERE "items"."id" = ? [["id", item_id]] 
+0

は 'includes'がここjoins''より良いオプションではないでしょうか? – Gabbar

+1

質問の情報に基づいて、いいえ。 'joins'は完璧です。各 'Account'からの情報だけを表示している場合、' Item'モデルを熱心に読み込む必要はありません。 –

+0

しかし、疑わしい時は、レールのログを確認してください。 –

関連する問題