has_many>通过?

时间:2012-12-12 15:43:37

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我的模特

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个家庭标签)我该如何解决这个问题?

Thanks..remco

2 个答案:

答案 0 :(得分:0)

您想要连接至少一个房子的标签集,对吗?

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

答案 1 :(得分:0)

不确定您希望视图的外观如何,但以下语句将为您提供与视图/数组中所有房屋相关联的唯一标记集:

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