Результаты MySQL COUNT интерпретируются в RoR как строка, а не как целое число - PullRequest
2 голосов
/ 04 августа 2010

Вот мой запрос для любопытных. Только первая и последняя строки должны иметь отношение к этому вопросу:

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 возвращает строку.

1 Ответ

2 голосов
/ 05 августа 2010

Вам необходимо преобразовать возвращенный атрибут count как целое число.

find_by_sql возвращает массив атрибутов из вашего запроса, Rails обрабатывает эти атрибуты как строки, и поскольку count является атрибутом вашего массива запросов, это строка в возвращении.Посмотрите документацию для метода для подтверждения этого:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...