在Rails中使用acts_as_taggable_on创建一个feed

时间:2015-01-08 16:08:19

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

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

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

我要做的是为当前用户创建一个Feed,该用户由他/她的群组中的帖子组成,这些帖子与当前用户的:post_tag至少有一个:user_tags。例如,如果我有一个用户选择“Developer,Designer”作为两个:user_tags,我想要从他/她的组中返回所有具有“Developer”和/或“Designer”的帖子作为:post_tags

经过几个小时的摆弄,这是我在post.rb中尝试的内容,但它给了我一个错误(“错误:列'tag_id'不存在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 

非常感谢有关如何正确创建此类Feed方法的任何建议。如果您希望我分享任何其他相关代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

所以,我找到了迄今为​​止在我的(公认有限的)测试中起作用的解决方案。希望这对任何寻求做类似事情的人都有帮助。当然,如果有人知道更有效的解决方法,我总是乐于改进。

我将此添加到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 %>