Rails每个标签获得最新的n个帖子

时间:2014-01-01 06:40:26

标签: mysql ruby-on-rails

class Post
has_many :tags 

class Tag
belongs_to :post

我需要一个查询,返回每个标签限制为n的所有帖子。

鉴于以下一组帖子(用Twitter上的标签标记):

#1: Post A #letter 
#2: Post B #letter
#3: Post 1 #number 
#4: Post C #letter 
#5: Post 2 #number 

我想获得每个标签的所有最新的2个帖子,给我以下结果:

#5: Post 2 #number 
#4: Post C #letter 
#3: Post 1 #number 
#2: Post B #letter

我一直在查找如何执行此操作几个小时,但只找到使用MySQL变量但不知道如何将其转换为Rails的结果(如this)。

我仍然不知道从哪里开始处理这个,所以任何帮助都表示赞赏;谢谢!

2 个答案:

答案 0 :(得分:1)

试试此代码

def get_tags(n)
  Tags.order('id desc').select("DISTINCT(NAME)").each do |tag|
    Post.where(tag: tag).limit(n)
  end
end

如果不能正常工作,此链接可能会对您有所帮助 Unique select from database

答案 1 :(得分:0)

也许你可以试试:

 @post = Post.joins(:tags).where(tags: {name: "letter"}).order(created_at: :desc).limit(2)

这使用joins ActiveRecord方法,where子句为hash conditions,created_at提供ordering(提供最新信息),limiting回复2条记录

这适用于单个标签;如果你想扩展到多个标签,我会使用SQL方法GROUP_BY,(ActiveRecord .group),如下所示:

 @post = Post.joins(:tags).where(tags: {name: "letter", name: "number"}).order(created_at: :desc).group("tags.name").limit(2)