【问题标题】:Rails 3: Railscast #167 virtual attribute for creating tags - @user.tagsRails 3:Railscast #167 用于创建标签的虚拟属性 - @user.tags
【发布时间】:2011-06-24 02:54:04
【问题描述】:
我想要一个标签系统,我可以通过创建标签的用户来分隔标签。我遵循 Railscast #167 关于使用虚拟属性设置标签的方法,但这种方式只能让我调用 @post.tags 来查找帖子的标签,但我不能调用 @user.tags 并找到它们的所有标签。
我怎样才能增强它,以便@user.posts.tag("music") 返回他们所有带有音乐标签的帖子?
感谢您提供帮助或了解我做错了什么。
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
tags
railscasts
virtual-attribute
【解决方案1】:
@user.posts 返回一个数组,因此您可以通过以下方式轻松过滤:
@user.posts.select do |post|
post.tag_names.include? "music"
end
但是,在这种情况下,您可能会遇到记录没有被急切加载的问题。像这样的事情应该解决这个问题:
Post.includes(:taggings => :tags).where("posts.user_id = ?", @user.id).select do |post|
post.tag_names.include? "music"
end