2016-11-22 6 views
0

最近のブロードキャストタグを収集する必要があります。関連するリソースに基づいて異なるリソースを返すためのRailsクエリ

私は私がタグ付けし、そのすべてのタグを見つけるために、放送に参加する必要が把握先月

で、ユーザーの放送からタグを見つけたいと思い、私はこれらのモデルは

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
  • 最後の隣には、私がしたタグをご希望のタグ9、2、1

を持っている場合この順序で戻される私は.order('broadcasts.created_at DESC') WHを試みた2

10、9、6、1、いくつかのより多くの検索と頭を掻くとドキュメントの読み取りが、私はこの

を行うことができます実現した後、ICHは、うまくいけば、それは他の誰かが助けfor SELECT DISTINCT, ORDER BY expressions must appear in select list

答えて

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') 
関連する問題