MySQL COUNT结果在RoR中被解释为字符串而不是整数

时间:2010-08-04 14:31:02

标签: mysql ruby-on-rails activerecord

这是我对好奇的疑问。只有第一行和最后一行应该对这个问题有所了解:

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 个答案:

答案 0 :(得分:2)

您需要将返回的count属性转换为整数。

find_by_sql从查询中返回一个属性数组,Rails将这些属性视为字符串,并且由于count是查询数组的一个属性,因此它是返回值中的一个字符串。请查看确认此方法的文档:

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