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 

并获得属于该类别的正确房屋。但是我怎样才能在控制器/模型逻辑中做到这一点?

4

1 回答 1

1

我会亲自在 House 模型中创建一个实例方法:

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 %>

你应该完成了:) 如果你愿意,你也可以为相关房屋添加一个限制,如果需要,可以将其作为参数从视图中传递(这里默认为 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 回答