【问题标题】:How do I see tags for all users on a model instance?如何查看模型实例上所有用户的标签?
【发布时间】:2010-12-15 23:31:09
【问题描述】:

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

这行得通。

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

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

非常感谢,

新泽西

【问题讨论】:

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


    【解决方案1】:

    我对你指定的插件一无所知,我还在学习 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)
    

    让我知道那些做什么。

    【讨论】:

    • 感谢您的回复,但其中一些是该插件所特有的,该插件的文档记录并不充分,我也不太愿意深入研究源代码来解决问题。反正还没有。 :)
    • 我觉得我写的太多了。你在我上一个代码块中尝试过我的建议吗?
    • 如果你有话题,不要担心写太多;抱歉,我没有注意到我重复了您的答案。我要说的只是编辑 p 并将其设为实例变量 @p 否则它对视图不可用。
    【解决方案2】:

    也许我错过了什么,但是:

    p = Post.tag_list # this returns []
    
    #should be 
    #...
    @post.find params[:id]
    #...    
    @post.tag_list
    

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

    【讨论】:

    • 你可能是对的。我稍后会检查并回复您。谢谢!
    • 试试看,让我们知道。如果这是问题,请接受 Dobry Den 对我的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2014-07-16
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多