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)。
我仍然不知道从哪里开始处理这个,所以任何帮助都表示赞赏;谢谢!
答案 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)