2013-04-23 70 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