2010-08-04 5 views
2

다음은 호기심에 대한 질문입니다. 첫 번째와 마지막 줄이 질문에 부담해야합니다MySQL 카운트 결과가 RoR에서 정수가 아닌 문자열로 해석됩니다.

SELECT s.parent_id AS id, COUNT(s.parent_id) as count 
    FROM items i 
    LEFT OUTER JOIN (SELECT item_id, user_id, MAX(created_at) as created_at 
    FROM item_views iv 
    WHERE iv.user_id = ? 
    GROUP BY item_id) AS v ON i.id = v.item_id 
    LEFT OUTER JOIN categories c ON c.id = i.category_id 
    INNER JOIN (SELECT node.id AS node_id, parent.title AS parent_title, parent.id AS parent_id 
    FROM categories AS node, categories AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt) s ON s.node_id=i.category_id 
    WHERE (i.updated_at > v.created_at OR v.created_at IS NULL) 
    AND i.updated_at > ? 
    GROUP BY s.parent_id; 

을 나는이 find_by_sql를 사용하여 호출 할 때 count 열에서 값 대신 정수의 "1" 같은 문자열이 될 것으로 보인다. 물론 to_i이라고 쉽게 부를 수는 있지만 그게 최선의 해결책은 아닙니다. MySQL에서 문자열을 반환하는 쿼리가 잘못되었을 수도 있습니다.

답변

2

반환 된 개수 속성을 정수로 형변환해야합니다.

find_by_sql은 쿼리에서 속성의 배열을 반환하고, Rails는 이러한 속성을 문자열로 처리하며 count는 쿼리 배열의 속성이므로 반환하는 문자열입니다. 이 확인 방법에 대한 설명서를 살펴보십시오.

http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class