2014-03-24 8 views
0

사용자가 검색 필드에 입력 한 내용을 저장하는 테이블이 있습니다. 나는 가장 인기있는 검색과 검색이 이루어진 횟수를 표시하는 작업을 작성했습니다. 이렇게하려면 내가 컨트롤러에서 다음 SQL 쿼리 ...Ruby에서 그룹화하고 개수를 계산하는 방법, 리팩터링

SELECT `query`, 
     COUNT(`query`) AS `query_count` 
FROM `searches` 
WHERE [foo things] 
GROUP BY `query` 
ORDER BY `query_count` DESC 

를 썼다 ... 그리고 인스턴스 변수로, 그리고 각각 배열을 반복 것을 저장하는 Search.find_by_sql(query)에 변수로 되었 차단 및 인쇄 search['query_count']. 이것은 내가 원하는 것을 정확히 수행하지만 Ruby 방식으로이 작업을 수행하는 방법을 알고 싶다. 왜냐하면 컨트롤러에서 SQL 쿼리 만하는 것은 나쁜 습관이라는 것을 알고 있기 때문이다. 나는 WHERE 조건을 named_scopes에 넣는 방법을 알고 있지만 Ruby에서 나머지 쿼리를 복제하는 방법을 모르겠습니다.

저는 mysql, ruby ​​1.8.7, rails 2.3.15를 사용하고 있습니다.

답변

2

이 될해야 한 쉽게 :

Search.select(:query, 'count(query) as query_count').where(foo things).group(:query).order('query_count DESC')