Rails使用某些标签查找所有帖子而不使用acts_as_taggable

时间:2011-03-03 04:30:17

标签: ruby-on-rails post find many-to-many acts-as-taggable

所以我正在努力学习铁轨,而我现在还不想作弊。

发布模型:

class Post < ActiveRecord::Base
    has_many :features
    has_many :tags, :through => :features
end

标记模型:

class Tag < ActiveRecord::Base
    has_many :features
    has_many :posts, :through => :features
end

加入表:

class Feature < ActiveRecord::Base
    belongs_to :tag
    belongs_to :post
end

我已经知道如何将帖子与标签相关联: Post.find_by_id(1)&lt;&lt; Tag.first

现在,我一直在寻找带有某些标签的帖子。如何搜索包含以下一个或多个标签的所有帖子:“游泳”,“正在运行”,“赚钱”

Post1包含标签:“骑自行车”,“攀岩”,“游泳”

Post2包含标签:“青蛙”,“鱼”

Post3包含标签:“赚钱”,“游泳”,“骑自行车”,“爱”

Post4包含标签:“游泳”

我希望首先显示符合用户兴趣的帖子。

示例:用户应按此顺序查看帖子列表.... post3,post1,post4。如果这太难了,我猜想找到所有带有确切标签的帖子的方法就足够了。

1 个答案:

答案 0 :(得分:0)

你应该能够做到

@tag.posts

有没有理由你没有使用has_and_belongs_to_many关系?

<强>更新

根据你的评论:

tag_ids = [1, 2, 3] # aka the IDs for tags ["swimming", "running", "making money"]
matches = {}
@posts.each do |post|
  count = 0;
  post.tags.each do |tag|
    count += 1 if tag_ids.include? tag.id
  end
  matches[count] ||= []
  matches[count] << post
end

可能会稍微优化一下,但matches将根据匹配的数量包含与键中所请求标记匹配的所有帖子。这也应该在Posts模型的类方法中而不是在控制器中。