2016-11-22 5 views
0

사용자의 최근 브로드 캐스트 태그를 수집해야합니다.관련 리소스를 기반으로 고유 한 리소스를 반환하는 레일스 쿼리

나는이 모델은 내가

는 내가 모든 태그를 찾아 다음 태그를 방송에 가입 할 필요가 파악 지난 달의 사용자 방송에서 태그를 찾을 싶습니다

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
  • 마지막에 다음 내가에 태그를 싶습니다 1

태그 (9), (2)를 가지고있는 경우 이 순서로 반환 내가 .order('broadcasts.created_at DESC') 어를 시도했습니다 2

10, 9, 6, 1, 좀 더 검색과 머리를 긁적 및 문서 읽기가 내가이

을 할 수있는 실현 한 무형 문화 유산은 잘하면 다른 사람이 도움이 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')