我需要收集用户最近的广播标签。
我已经安排好了这些模型
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
发布于 2016-11-22 08:16:23
经过更多的搜索、抓挠和文档阅读之后,我意识到我可以做到这一点。
希望它能帮助其他人
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')https://stackoverflow.com/questions/40736108
复制相似问题