我正在尝试使用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方法的任何建议。如果您希望我分享任何其他相关代码,请告诉我。
答案 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 %>