0

我的模型has_many>通過?

class House 
has_many :taggings 
has_many :tags, through: :taggings 
end 


class Tag 
has_many :taggings 
has_many :houses, through: :taggings 
end 

路線:

scope "/:locale" do 
resources :houses do 
    collection do 
    get 'tags/:tag', to: 'houses#index', as: :tag 
end 

衆議院控制器:

if params[:tag] 
     @houses = House.tagged_with(params[:tag]) 
     @tag = Tag.find_by_name(params[:tag]) 
    else 

衆議院索引視圖

- @houses.each do |house| 
= raw house.tags.map(&:name).map { |t| link_to t, tag_houses_path(t), class: active_class?(tag_houses_path(t)) }.join 

我要顯示的L標籤油墨到標記頁面。這可以正常工作,但是當兩個房屋標記了相同的標記名(數據庫中爲1)時,該視圖顯示2個相同的標記。 (例如房子1和2被標記爲「家人」,我在索引頁面上看到2個家庭標籤)我該如何解決這個問題?

Thanks..remco

回答

0

你要附加到至少一個房子的標籤集合,對不對?

Tag.joins(:taggings).select(「distinct(tags.id)」) 
+0

當1房子與標記「家庭」的關係標籤顯示1次,當2個不同房屋標籤與家庭> 2家庭標籤顯示 - 當3個不同的房子標籤與家庭> 3家庭標籤顯示。所以在我的情況下,5個房屋被標記爲「家庭」,5個標籤的名稱爲「family」,而不是一個家庭標籤,這是問題...... remco – Remco

0

不知道你想要什麼你的看法正好樣子,但下面的語句會給你一套獨特的與視圖/陣列中的所有房屋相關標籤:

@houses.collect {|h| h.tags.collect {|x| x.name}}.flatten.uniq