如何在模型实例上查看所有用户的标签?

时间:2010-12-15 23:31:09

标签: ruby-on-rails acts-as-taggable-on

我正在使用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

2 个答案:

答案 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,而不是它的实例。