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)”)
答
不知道你想要什么你的看法正好样子,但下面的语句会给你一套独特的与视图/阵列中的所有房屋相关标签:
@houses.collect {|h| h.tags.collect {|x| x.name}}.flatten.uniq
当1房子与标记“家庭”的关系标签显示1次,当2个不同房屋标签与家庭> 2家庭标签显示 - 当3个不同的房子标签与家庭> 3家庭标签显示。所以在我的情况下,5个房屋被标记为“家庭”,5个标签的名称为“family”,而不是一个家庭标签,这是问题...... remco – Remco