这是我对好奇的疑问。只有第一行和最后一行应该对这个问题有所了解:
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返回一个字符串。
答案 0 :(得分:2)
您需要将返回的count属性转换为整数。
find_by_sql
从查询中返回一个属性数组,Rails将这些属性视为字符串,并且由于count是查询数组的一个属性,因此它是返回值中的一个字符串。请查看确认此方法的文档:
http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class