我的模特
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
答案 0 :(得分:0)
您想要连接至少一个房子的标签集,对吗?
Tag.joins(:taggings).select(“distinct(tags.id)”)
答案 1 :(得分:0)
不确定您希望视图的外观如何,但以下语句将为您提供与视图/数组中所有房屋相关联的唯一标记集:
@houses.collect {|h| h.tags.collect {|x| x.name}}.flatten.uniq