2012-09-15 5 views
0

내 모델 :표시 동일 항목

class House < ActiveRecord::Base 

    has_many :category_join_table 
    has_many :categories, :through => :category_join_table 

end 

범주는 "럭스"모범 "이 이상적"입니다 요법

class CategoryJoinTable < ActiveRecord::Base 
    belongs_to :house 
    belongs_to :category 
end 

내 생각은 집 속성에 표시하는 것입니다 동일한 카테고리/카테고리에 속하는 다른 주택을 보여줍니다. 콘솔에서이 작업을 수행 할 수 있습니다.

a = Category.find(4) 
a.houses 

및 해당 범주에 속하는 정확한 집을 가져옵니다. 하지만 컨트롤러/모델 논리에서이 작업을 어떻게 수행 할 수 있습니까?

답변

1

개인적으로 하우스 모델의 인스턴스 메서드를 만들 것입니다 :

def related_houses 
    House.joins(:categories).where("categories.id IN (?) AND houses.id != ?", self.categories, self.id) 
end 

당신은 기본적으로 현재의 주택을 제외하고, 적어도 하나 개의 공유 카테고리와 모든 주택을 찾을 수 있습니다. 뷰에서 다음

, 집 인스턴스를 통해 단지 루프 :

<% @house.related_houses.each do |related_house| %> 
    <!-- OUTPUT related_house stuff HERE --> 
<% end %> 

그리고 당신은 당신이 원하는 경우에 당신은 너무 관련 주택에 제한을 추가 할 수 있습니다 :) 수행하고,에서 PARAM로 전달되어야한다 보기 필요 (여기에 기본 5) 일 경우 :

def related_houses(limit = 5) 
    House.joins(:categories).where("categories.id IN (?) AND houses.id != ?", self.categories, self.id).limit(limit) 
end 

편집 대답은, 당신의 하우스

+0

완벽한 첫 많은 종류가 있었다 보지 않았다! 감사.... – Remco