关系是:
class apartment
belongs_to :house
end
class house
has_many :apartments
end
在我的公寓控制器的索引方法中,我发现所有房屋都有houses.all
。
在视图中有一幢房子与正确(has_many)公寓
问题:
有些房子没有公寓,我不想在我的公寓页面上展示这些房屋。我怎么能意识到这一点?
答案 0 :(得分:2)
最好的方法是在你的房屋模型中使用命名范围,如下所示:
scope :filled, :joins => :apartments
在控制器操作中,你必须调用House.filled
这是使用select方法的解决方案:
House.select {|house| house.apartments.any?}
答案 1 :(得分:2)
当您枚举时,您可以通过多种方式执行此操作:
for house in houses
if house.appartments.count > 0
puts house.title
end
end
或者当您使用示波器获取数据时:
scope :with_appartments, lambda { joins(:appartments).group('appartments.id').uniq { |h| h[:id] } }
myHousesWithAppartments = House.with_appartemnts
或者您可以使用计数器缓存:http://railscasts.com/episodes/23-counter-cache-column
答案 2 :(得分:0)
您可以使用'empty?'
方法:
<% if !(@house.apartments.empty?) %>
<% @house.apartments.each do |aprtmt|
<%= aprtmt.info %>
<% end %>
<% end %>
这是查看它的最简单方法。正确的Rails说你应该把你的逻辑放在控制器中,而不是视图中。因此,更合适的实现将在您的Houses#Show控制器操作中:
@houses = House.all
@houses_with_apartments = []
@houses.each do |house|
@houses_with_apartments << house unless house.empty?
end
然后在您的视图中使用@houses_with_apartments变量。
希望这有帮助。