0

我正在使用可标记的行为。两种模型:用户和帖子。

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']

这行得通。

现在,问题是我希望另一个用户能够出现并为帖子添加标签。也许这个用户会认为它很有帮助。让我们假设这样做是有意义的。可能是主持人……随便。

鉴于上述情况,假设多个用户添加了标签,我将如何获得给定帖子上所有标签的列表?

谢天谢地,

新泽西州

4

2 回答 2

4

我对你指定的插件一无所知,我还在学习 Rails。但我不认为

p = Post.tag_list

无论如何,这就是你想要的。您要求的是 Post 类的标签列表,而不是特定帖子的标签列表。例如,如果用户有 'email' 和 'name' 列,你也不能这样做:

u = User.names
u = User.emails

这真的没有意义。但是您可以执行以下操作:

User.column_names
#=> ["id", "email", "hashed_password", "created_at", "updated_at"]

因为那是一个类方法。现在,也许 tag_list 是一个类方法,但由于它查找空 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)

让我知道那些做什么。

于 2010-12-19T08:16:40.447 回答
0

也许我错过了一些东西,但是:

p = Post.tag_list # this returns []

#should be 
#...
@post.find params[:id]
#...    
@post.tag_list

您当前在 post 类上调用 tag_list,而不是它的实例。

于 2010-12-19T08:23:02.270 回答