我目前正在开发一个 Ruby on Rails 应用程序,但遇到了一个我还无法解决的问题。我将从头开始构建一个标签系统,就像 Ryan Bates 构建的那样(参见这里:http ://railscasts.com/episodes/382-tagging?view=asciicast )
所以我要疯了:
假设我有以下模型:
class Post < ActiveRecord::Base
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :post
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :things, through: :taggings
end
我现在有一个显示所有帖子的索引页面。我还想显示与页面上显示的所有帖子相关联的所有标签。
到目前为止,我已经完成的是我可以在加载帖子时包含所有标签:
# posts_controller/index.rb
def index
@posts = current_user.posts.includes(:tags)
end
但是当我遍历标签时,我得到了重复。
- @posts.each do |post|
= raw post.tags.map(&:name).map { |t| link_to t, tag_path(t) }.join(', ')
有人对此有解决方案吗?如何加载与帖子集合关联的所有标签。
在这里,我已经描述了我的 SQL 问题的解决方案,也许有人可以帮助我。
SELECT DISTINCT name FROM tags INNER JOIN taggings ON taggings.tag_id = tags.id
WHERE taggings.post_id IN (1, 2, 3, ...) // The Post IDS
先感谢您!
菲利普