2014-05-19 9 views
1

레일에 새로운 기능이 있습니다. 2 개의 중첩 된 리소스가 있습니다 : 사진 및 태그.레일에 명명 된 스코프는 레코드 수로 기록합니다.

Photos 
    Tags 
end 

사진에는 많은 태그가 있고 사진에는 태그가 있습니다.

사진을 태그 수로 주문하는 범위를 만들고 싶습니다. 그들과 가진 관계는 안으로있다 태그 :

t.integer "photo_id" 해당 열.

내 범위는 어떻게해야합니까? 먼저 가장 많은 태그가있는 사진을 원한다면?

고마워요.

+0

범위 : most_tagged, -> {order (: tags) .reverse_order.count.limit (10)}하지만 태그는 사진 용 열이 아닙니다 ... 그래서 어떻게 해야할지 모르겠습니다. 그것을 연결하십시오 – Gibson

답변

1

belongs_tohas_one 연관성에 대한 일부 문서를 읽는 것이 좋습니다.

각 사진의 태그 수를 추적하려면 belongs_to:counter_cache 옵션이 특히 유용 할 수 있습니다. 이것은 또한 정렬 (및 색인) 컬럼을 제공합니다.

거기에서 인터넷을 통해 예를 통해 필요한 범위를 만드는 것이 매우 쉽습니다.

+0

안녕하세요! 나는 태그 모델의 이름 인 tags_count라는 사진 모델에 컬럼을 추가했습니다. counter_cache : true를 태그 모델에 추가했습니다. 내 범위를 지금 어떻게해야합니까? – Gibson

+0

나는 이것을했다 : scope : most_tagged, -> {order ('tags_count desc')}, 오류를주지는 않지만 순서가 옳지 않다. 내 DBB를 재설정해야합니까? – Gibson

+0

저는 레일스 ActiveRecord 구문에 익숙하지 않습니다. (2.3에 대해 가장 잘 알고 있습니다.) 범위에 대한 구문은 원시 쿼리에 대해 입력 한 것과 매우 유사해야합니다. 모든 사진의 태그 수는 정확합니까? – Kache