首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails查询以基于关联资源返回不同的资源

Rails查询以基于关联资源返回不同的资源
EN

Stack Overflow用户
提问于 2016-11-22 07:31:39
回答 1查看 56关注 0票数 0

我需要收集用户最近的广播标签。

我已经安排好了这些模型

代码语言:javascript
复制
class Broadcast < AR::Base
  belongs_to :user
  has_many :broadcast_tags
  has_many :tags, through: :broadcast_tags
end

class Tag < AR::Base
  has_many :broadcast_tags
  has_many :broadcasts, through: :broadcast_tags
end

class BT < AR::Base
  belongs_to :broadcast
  belongs_to :tag
end

我想从上个月的用户广播中找到标签。

我想我需要加入广播来标记,然后找到在这些广播中使用的所有标记。

代码语言:javascript
复制
Tag.joins(:broadcasts).where(
  broadcasts: { user_id: current_user.id, created_at: Time.current.all_month }
)

如果用户在最近的多个广播中使用了单个标记,则会多次返回单个标记。我只想收到不同的标签。当然,如果我称之为“区分”的话,效果会很好。

代码语言:javascript
复制
Tag.joins(:broadcasts).where(
  broadcasts: { user_id: current_user.id,   created_at: Time.current.all_month }
).distinct

我还需要按照在广播中找到它们的顺序来排序这些不同的标记。

所以如果

  • 最后一次广播有标记10,9,6,1。
  • 后面的标签是9,2,1。

我想按这个顺序返回标签。

10、9、6、1、2

我试过.order('broadcasts.created_at DESC'),它抱怨for SELECT DISTINCT, ORDER BY expressions must appear in select list

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 08:16:23

经过更多的搜索、抓挠和文档阅读之后,我意识到我可以做到这一点。

希望它能帮助其他人

代码语言:javascript
复制
Tag.joins(:broadcasts).where(
  broadcasts: { user_id: user.id, created_at: Time.current.all_month }
).group('tags.id, tags.name').order('max(broadcasts.created_at) DESC')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40736108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档