【发布时间】:2013-11-12 05:55:42
【问题描述】:
在我的应用程序中,用户可以创建他们的作品可能在也可能不在的画廊。用户拥有并属于许多画廊,每个画廊都有一个由画廊的user_id 字段指定的“创建者”。
因此,要获取用户所在的 5 个最新画廊,我可以执行以下操作:
included_in = @user.galleries.order('created_at DESC').uniq.first(5)
# SELECT DISTINCT "galleries".* FROM "galleries" INNER JOIN "galleries_users" ON "galleries"."id" = "galleries_users"."gallery_id" WHERE "galleries_users"."user_id" = 10 ORDER BY created_at DESC LIMIT 5
要获得他们创建的 5 个最新画廊,我可以这样做:
created = Gallery.where(user_id: id).order('created_at DESC').uniq.first(5)
# SELECT DISTINCT "galleries".* FROM "galleries" WHERE "galleries"."user_id" = 10 ORDER BY created_at DESC LIMIT 5
我想将这两个一起显示,以便显示他们创建或所在的 5 个最新画廊。类似于以下内容:
(included_in + created).order('created_at DESC').uniq.first(5)
有谁知道如何构建一个高效的查询或查询后循环来做到这一点?
【问题讨论】:
-
(included_in + created).order('created_at DESC').uniq.first(5)不起作用吗?还是尝试减少查询次数? -
@dax 不行,给
undefined method 'order' for #<Array:0x007fda568e8248> -
@dax 效果很好,谢谢!如果您想写出解决方案,我也很高兴为您提供答案:
(included_in + created).sort_by(&:created_at).uniq.first(5) -
酷,很高兴它有帮助!
标签: ruby-on-rails ruby-on-rails-3 activerecord