在 Rails 中使用 acts_as_taggable_on 创建 Feed

Creating a feed with acts_as_taggable_on in Rails

我正在尝试使用 acts_as_taggable_on 在 Rails 中创建提要,但遇到了一些麻烦。

在我的应用程序中,有属于组的用户,每个用户使用 acts_as_taggable_on 上下文 :user_tags 为 himself/herself 选择多个标签。用户创建的帖子也有标签,但上下文 :post_tags

我想做的是为当前用户创建一个提要,该提要由 his/her 组中的帖子组成,这些帖子至少有一个 :post_tag 与当前用户的 [=4] 相同=].因此,例如,如果我有一个用户选择 "Developer, Designer" 作为两个 :user_tags,我想 return his/her 组中的所有帖子 "Developer" and/or "Designer" 作为 :post_tags.

经过几个小时的摆弄,这是我在 post.rb 中尝试的方法,但它给了我一个错误 ("ERROR: column 'tag_id' does not exist LINE 1"),考虑到标签确实存在 tag_ids,这似乎很奇怪.

# Returns posts with tags also attributed to the given user.
  def self.from_posts_matching_tags_of(user)
    matching_tag_ids = "SELECT tag_id FROM taggings
                        WHERE  taggable_id = :user_id"
    where("tag_id IN (#{matching_tag_ids}) OR user_id = :user_id", user_id: user)
  end 

如能就如何正确创建此类提要方法提出任何建议,我们将不胜感激。如果您希望我分享任何其他相关代码,请告诉我。

所以,我想出了一个解决方案,到目前为止在我的(公认的有限的)测试中有效。希望这对其他寻求做类似事情的人有所帮助。当然,如果有人知道解决这个问题的更有效方法,我总是乐于改进。

我将其添加到 pages_controller.rb,它似乎可以解决问题:

def index
  if logged_in?
    @feed_items = Post.tagged_with([@current_user.user_tag_list], :on => :post_tags, :any => true)
  end
end

index.html.erb 上:

<% if @feed_items.any? %>
    <% @feed_items.each do |post| %>
        <%= link_to post.content, post %><br/>
    <% end %>
<% end %>