Active Record无法识别POW
方法或SQRT
中的find
和find_by_sql
等常见SQL函数。我该如何解决这个问题?似乎没有文献: - (
答案 0 :(得分:1)
ActiveRecord支持最常见的calculation functionalities。 对于任何其他高级用法,您始终可以通过以下方式自定义select语句的值:
find(:all, :select => "COUNT(*)")
就个人而言,我还没有找到一个例子,将ActiveRecord(和SQL)用于以下某个语句是有意义的。
SELECT POW(9, 6)
531441
SELECT POW(2, -3)
0.125
SELECT SQRT(65536)
256
恕我直言,Ruby数学库它可能是一个更好的选择。
您是否有使用ActiveRecord无法创建的POW或SQRT查询的真实世界用法示例?
答案 1 :(得分:0)
我认为ActiveRecord根本不直接支持标量函数。因为确保提交给数据库的查询简洁并产生尽可能小的记录集,所以组功能肯定是回归,因为它很有意义。
另一方面,Scalars并没有提供太多的好处,而且目前还没有我知道可以提供它的AR语法。根据需要在模型中执行计算可能会有实际好处,因为它会减少数据库服务器上的负载(尽管只是极少量)。在整个平台集中建立一个公共集也很棘手:如果你的DBMS没有实现POW(),那么(我相信它本身不是ANSI首选的函数名)你会期望AR到什么办?
我认为如果你真的想让你的DBMS为你做标量函数,你将不得不提供它们作为SQL字符串的一部分,正如你所提到的,find_by_sql
,指定选择列表或类似的东西。但我会把功能放在你的模型中。