2010-12-15 48 views
0

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

This works。

现在,问题是我希望另一个用户能够前来,并添加标签的帖子。也许这个用户会认为这是有帮助的。我们假设这样做是有道理的。可以成为主持人......无论如何。

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

感激,

NJ

回答

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是一个类方法,但它看起来像用于查找孤立标签或某些东西,这是由于它看起来为空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) 

还是让我知道这些做。

+0

感谢您的回应,但其中一些特殊的插件,这是没有非常有据可查的文件,我没有太多的挖掘源头弄清楚。还没有。 :) – 2010-12-19 17:11:59

+0

我觉得我写得太多了。你在我最后的代码块中尝试了我的建议吗? – danneu 2010-12-19 17:35:40

+0

如果你谈论话题,不要担心写太多;对不起,我没有注意到我的重复你的答案。唯一我要说的是编辑并使p成为实例变量@p,否则视图将不可用。 – mark 2010-12-19 19:13:33

0

也许我失去了一些东西,但:

p = Post.tag_list # this returns [] 

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

您目前正在呼吁tag_list对后级,而不是它的一个实例。

+0

你可能是对的。我会在稍后检查并回复你。谢谢! – 2010-12-19 17:11:00

+0

试一试,让我们知道。如果这是问题,请接受Dobry Den的回答。 – mark 2010-12-19 19:11:31

相关问题