如何修复重复的标签?

时间:2015-07-27 01:01:11

标签: ruby-on-rails ruby tags

用户可以提交习惯,目标,价值观和统计数据的标签。

当用户点击tag_cloud中的标签时,他会被重定向到包含该标签所有实例的主页,但出于某种原因,属于Habits的实例会重复。

enter image description here

关于这是为什么的任何想法?

pages_controller

@habits = current_user.habits.tagged_with(params[:tag])

habit.rb

class Habit < ActiveRecord::Base
  belongs_to :user
  acts_as_taggable
  before_save :set_tag_owner

  def set_tag_owner 
    # Set the owner of some tags based on the current tag_list
    set_owner_tag_list_on(self.user, :tags, self.tag_list)
    # Clear the list so we don't get duplicate taggings (hmmm what does this mean? I copied this code & comment from somewhere else)
    # self.tag_list = nil
  end

views / home.html.erb routes.rb 中的<%= render @habits %>root 'pages#home'

我试图仅发布相关内容,但这是 gist

1 个答案:

答案 0 :(得分:1)

您是否尝试取消注释:

self.tag_list = nil

我猜你是从this source或链接的stackoverflow问题复制过来的? 在您的代码注释中,您询问了以下注释行的内容:

  

清除列表,以便我们不会获得重复的标记

我挖掘了sources并找到了你要调用的方法:

def set_owner_tag_list_on(owner, context, new_list)

因此,当最后一个参数被称为new_list时,我想您提交给set_owner_tag_list_on方法的旧列表将再次设置相同的标记。因此,没有所有者的旧tag_list设置为nil,因为tag_list似乎只包含没有所有者的标记(根据docs

虽然我并没有真正意识到使用这种自有标签的重点,因为你为每个用户创造了新的习惯,并且总是按用户过滤。就我所知,acts_as_taggable_on的所有权功能仅在您拥有一个由多个用户标记的资源并且您想知道谁标记了什么时才有用。在你的情况下,每个人都有自己的可标记资源。