0

빠른 질문 : 나는 모든 항목레일 4 : 모델 로직

- @items.each do |item| 

을 통해 :id :user_id :item_id 내가 루프 내에서 확인할 수있는 방법

를 포함하는 FavoriteItem 모델을 가지고

... current_user 님이 항목을 즐겨 찾기에 추가 했습니까?

=> 예를 들면 :

current_user.id == 243 
item.id == 53 

이 DB 항목이 FavoriteItems에 존재 :이 항목이 현재 사용자가 즐겨 찾기있어 경우

:id => 1, :user_id => 243, :item_id => 53 

가 어떻게 내 루프에서 확인할 수 있습니까?

귀하의 모든 도움에 감사드립니다. 더 많은 정보가 필요하면 알려주세요. 이 기능을 많이 사용하는 거라면

답변

4

당신은 하나의 데이터베이스 호출에서이 작업을 수행 할 수 있어야한다 :

def favorited_by?(user) 
    favorited_items.where(:user_id => user).exists? 
end 

을 다음 루프에서 item.favorited_by?(current_user) 말 :

item.favorited_items.where(:user_id => current_user).exists? 

또한 Item에 방법에 그것을 마무리 할 수 .

큰 숫자의 items을 반복한다면 n + 1 쿼리를 피하기 위해 현재 사용자의 즐겨 찾기를 사전 계산할 수 있습니다.

1

당신은 당신은 아마 항목 모델에 대한 범위를 만들려면, mapinclude?

@items.each do |item| 
    if item.favorited_items.map(&:user_id).include?(current_user.id) 
    # yep, there's a match - do something 
    end 
end 

와 함께 할 수 있습니다.