所以我正在努力学习铁轨,而我现在还不想作弊。
发布模型:
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。如果这太难了,我猜想找到所有带有确切标签的帖子的方法就足够了。
答案 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模型的类方法中而不是在控制器中。