0

我的模型

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

我想显示带有标记页面链接的标签。这很好用,但是当 2 个房屋被标记为相同的标记名(DB 中的 1 个)时,视图会显示 2 个相同的标记。(例如,房子 1 和 2 被标记为“家庭”,我在索引页面上看到 2 个家庭标签)我该如何解决这个问题?

谢谢..remco

4

2 回答 2

0

不确定您希望您的视图看起来像什么,但以下语句将为您提供与视图/数组中所有房屋相关联的唯一标签集:

@houses.collect {|h| h.tags.collect {|x| x.name}}.flatten.uniq
于 2012-12-12T16:28:53.053 回答
0

您想要至少附在一个房子上的一组标签,对吧?

Tag.joins(:taggings).select(“distinct(tags.id)”)
于 2012-12-12T16:09:58.023 回答