has_many>通过?

has_many>通过?

问题描述:

我的模型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

你要附加到至少一个房子的标签集合,对不对?

Tag.joins(:taggings).select(“distinct(tags.id)”) 
+0

当1房子与标记“家庭”的关系标签显示1次,当2个不同房屋标签与家庭> 2家庭标签显示 - 当3个不同的房子标签与家庭> 3家庭标签显示。所以在我的情况下,5个房屋被标记为“家庭”,5个标签的名称为“family”,而不是一个家庭标签,这是问题...... remco – Remco

不知道你想要什么你的看法正好样子,但下面的语句会给你一套独特的与视图/阵列中的所有房屋相关标签:

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