Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从Rails中的SQL查询返回值数组而不是对象数组_Mysql_Ruby On Rails - Fatal编程技术网

Mysql 从Rails中的SQL查询返回值数组而不是对象数组

Mysql 从Rails中的SQL查询返回值数组而不是对象数组,mysql,ruby-on-rails,Mysql,Ruby On Rails,我在Rails模型中有一个SQL查询,它用一个对象数组进行响应。每个对象都有一个名为points的属性,该属性带有一个值 但是查询最好只返回一个点的数组,比如[10,15,5],而不是[object,object,object],后者需要将点提取到另一个数组中才有用 模型文件 LAST_3_SELECT = " SELECT ( (data.ap / (data.apa * 1.0)) + (data.vp / (data.vpa * 1.0))

我在Rails模型中有一个SQL查询,它用一个对象数组进行响应。每个对象都有一个名为
points
的属性,该属性带有一个值

但是查询最好只返回一个
点的数组,比如
[10,15,5]
,而不是
[object,object,object]
,后者需要将点提取到另一个数组中才有用

模型文件

LAST_3_SELECT = "
  SELECT
    (
      (data.ap / (data.apa * 1.0))
      +
      (data.vp / (data.vpa * 1.0))
    )
    / 2 * 1.5 * data.level
    AS points
  FROM data
  WHERE data.user_id = ?
  GROUP BY data.id
  ORDER BY data.created_at DESC
  LIMIT 3
"

def self.last_3(user_id)
  connection.select_all(sanitize_sql_array( [LAST_3_SELECT, user_id]), "last-3")
end
这是否可以在查询本身中执行,或者是否有必要在查询外部的方法中执行

我没有太多将原始SQL查询写入Rails方法的经验,因此非常感谢您提供任何指导。

您可以使用它将点放入数组中

def self.last_3(user_id)
  connection.select_all(sanitize_sql_array( [LAST_3_SELECT, user_id]), "last-3").pluck(:points)
end

这里
points
是要提取的列名

为什么不直接进行一个附加的map调用呢?对于
.map(&:points)
,它返回
NoMethodError(对于{“points”=>2.4000000000000004}的未定义方法“points”:散列):
只需执行
map{row | row[“points”}
NoMethodError
使用.collect(&:points)代替.collect(&:points)。这将得到数组中的品脱列表。@pandaman,对于活动记录结果,这是否有效,
result.first.points
Rails4。尝试了
.collect()
,但遇到了类似
NoMethodError(未定义的{“points”=>…}:Hash的方法'points')
。但是能够使用
.map
使其工作。