我需要收集用户最近的广播标签。
我已经设置了这些模型
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
我想在上个月找到用户广播中的标签
我想我需要加入广播来标记,然后找到那些广播中使用的所有标签
Tag.joins(:broadcasts).where(
broadcasts: { user_id: current_user.id, created_at: Time.current.all_month }
)
如果用户在多个最近的广播中使用过它们,则会多次返回单个标签。我想只收到不同的标签。如果我只是打电话给那个当然可以正常工作。
Tag.joins(:broadcasts).where(
broadcasts: { user_id: current_user.id, created_at: Time.current.all_month }
).distinct
我还需要按照在广播中找到它们的顺序来排序这些不同的标签。
所以,如果
我希望按此顺序返回标签
10,9,6,1,2
我已尝试.order('broadcasts.created_at DESC')
投诉for SELECT DISTINCT, ORDER BY expressions must appear in select list
答案 0 :(得分:0)
经过一些搜索,头脑刮擦和文档阅读后,我意识到我可以做到这一点
希望它可以帮助其他人
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')