在 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 %>
我正在尝试使用 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 %>