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 つの家族タグが表示されます) これを修正するにはどうすればよいですか?

ありがとう..レムコ

4

2 に答える 2

0

少なくとも1つの家に付けられたタグのセットが必要ですよね?

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

ビューを正確にどのように表示したいかはわかりませんが、次のステートメントにより、ビュー/配列内のすべての家に関連付けられた一意のタグ セットが得られます。

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