0

私のモデル:

class House < ActiveRecord::Base
    
    has_many :category_join_table
    has_many :categories, :through => :category_join_table

end

カテゴリは、例として「lux」、「idealfortwo」などです。

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

私の考えは、同じカテゴリ/カテゴリに属する​​他の家を家のプロパティの表示ページに表示することです。私はコンソールでこれを行うことができます:

a = Category.find(4)
a.houses 

カテゴリに属する​​正しい家を取得します。しかし、コントローラー/モデルロジックでこれを行うにはどうすればよいですか?

4

1 に答える 1

1

Houseモデルでインスタンスメソッドを個人的に作成します。

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

基本的に、現在の家を除いて、少なくとも1つの共有カテゴリを持つすべての家が見つかります。

次に、ビューで、家のインスタンスをループします。

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

そして、あなたはやるべきです:)必要に応じて、関連する家にも制限を追加し、必要に応じてビューからパラメータとして渡すことができます(ここではデフォルト5):

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

編集された答え、あなたの家が最初に多くのカテゴリーを持っているのを見ませんでした

于 2012-09-15T22:38:15.740 に答える