2013-04-23 39 views
0

嵌套的资源,这是我的房子模型与过滤

has_many :taggings 
has_many :tags, through: :taggings 

def self.tagged_with(name) 
    Tag.find_by_name!(name).houses 
end 

end 

这是我的房子控制器

def index 
     if params[:tag] 
      @houses = House.tagged_with(params[:tag]) 
    end 
end 

观点:

- @houses.each do |house| 
ect 

这工作得很好......这滤掉带有当前标签的房屋,像这样/ house/tag/tagname

但我实现了嵌套资源,所以我需要将我的视图更改为此。

- @regions.each do |region| 
     - region.houses.find_all do |house| 

如何在新视图中使用过滤器标签?我以为这

- @regions.each do |region| 
     - region.houses.find_tagged_with(params[:tags]) do |house| 

但这不会工作...请帮助。

回答

1

为什么不在身边过滤它的其他方式?也就是说,而不是让所有的房子的区域和标签将其过滤,得到所有的标签房屋和地区将其过滤:

def index 
    @regions = Region.all # or whatever 
    @houses = House.tagged_with(params[:tag]) 

    @regions.each do |region| 
    @houses.where(region_id: region.id).each do |house| 
     ... 
    end 
    end 
end 
+0

它..工作...你是男人! – Remco 2013-04-23 09:36:58

0

这是行不通的,因为tagged_with是在House类中定义的,不能在实例或任何集合上调用。该region.houses是一个数组(假设区has_many房屋),所以它不会工作。要做到这一点的方法之一是使用ActiveRecord ::关系

@regions.each do |region| 
- region.houses.where(:name => params[:tag).each do |house| 

参考Rails的指导更多地了解它...

+0

感谢阿迪亚快速回复!我测试你是你的解决方案,但我的输出为空。我想是因为这些标签在另一张桌子上。 类众议院<的ActiveRecord :: Base的 \t延长FriendlyId \t的has_many:引用的Tagging 结束 类标签<的ActiveRecord :: Base的 的has_many:房子,通过:引用的Tagging 结束 我怎样才能解决这个问题? – Remco 2013-04-23 06:18:29

+0

额外信息...我的方法是基于http://railscasts.com/episodes/382-tagging – Remco 2013-04-23 06:33:23