2017-11-10 2 views
1

두 개의 서로 다른 모델을 통해 루프 :레일 : 나는 기본 검색을 구현하고 나는이 같은 결과를 통해 반복하고있어

보기/아이템/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 표시하고 싶습니다. 두 개의 다른 모델을 통해 루프를 만들고 원하는 결과를 표시하려면 어떻게합니까?

당신은 계정과 사용자 간의 연결을 통과 joins을 사용할 수 있습니다

답변

2

과 같은 사용자와 항목과의 관계 :

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

이 당신에게 가입 계정 테이블의 각 열에 대해 요청하는 SQL 쿼리를 줄 것이다 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

질문에있는 정보를 기반으로합니다. 조인은 완벽합니다. 각'Account'의 정보 만 보여 주면'Item' 모델을 열렬히로드 할 필요가 없습니다. –

+0

의심 스러울 때 레일 로그를 확인하십시오. –

관련 문제