我正在使用act-as-taggable。两种模式:用户和帖子。
Posts belongs_to :user
User has_many :posts
帖子行为可标记。 用户扮演标记器
所有这一切都很简单并且正在发挥作用。但是,我有一个用例,可能超出了这个插件的工作方式。
我希望帖子能够被多个用户标记。在用户的帖子上创建标记时,在执行以下操作时不会显示该标记:
p = Post.first
p.tag_list # this returns []
如果查看正在生成的SQL,则选择“tagger_id”为NULL的记录。当然,tagger_id在这种情况下是user_id,并且非常不是NULL。
但是,如果你回到它,你可以得到你想要的东西。
p = Post.find(1) # get a post to work with
p.tags_from(p.user) # returns an array of the tags: ['cats','dogs','wildebeasts']
这很有效。
现在,问题是我希望其他用户能够出现并在帖子中添加标签。也许这个用户会认为它很有帮助。让我们假设这样做是有意义的。可以是主持人......无论如何。
鉴于上述情况,假设多个用户添加了标签,我如何得到给定帖子上所有标签的列表?
感激,
NJ
答案 0 :(得分:4)
我对你指定的插件一无所知,我还在学习Rails。但我不认为
p = Post.tag_list
无论如何,会是你想要的。您要求Post类的标记列表而不是特定帖子的标记列表。例如,如果用户有“电子邮件”和“名称”列,则您也无法执行以下操作:
u = User.names
u = User.emails
这没有任何意义。但你可以这样做:
User.column_names
#=> ["id", "email", "hashed_password", "created_at", "updated_at"]
因为那是一种类方法。现在,也许tag_list是一个类方法,但看起来它用于查找孤立标签或其他东西,因为它查找null tag_givers。
但是因为我还是Rails的新手,而且我也不知道你的插件是如何工作的,所以有些事情你可以尝试一下:
p = Post.find(1)
p.tag_list # p.column_name_of_the_column_that_holds_the_tags should work
# or, maybe pass in ALL users as an array
p.tags_from(User.all)
Lemme知道那些人做了什么。
答案 1 :(得分:0)
也许我错过了一些东西,但是:
p = Post.tag_list # this returns []
#should be
#...
@post.find params[:id]
#...
@post.tag_list
您目前正在邮政类上调用tag_list,而不是它的实例。