2009-06-30 41 views
0

活動記錄不識別find方法中的POWSQRTfind_by_sql方法中的常見SQL函數。我如何解決這個問題?有似乎沒有文學那裏:-(活動記錄sql查詢中的數學函數? (pow,sqrt等)

+1

你可以粘貼一個你如何使用它的例子。我向你保證他們會工作。 – 2009-06-30 17:55:51

+0

本說什麼,我以前做過。請發佈代碼示例。 – 2009-06-30 17:59:52

+0

這裏是一個例子 Location.find_by_sql(select * from TABLENAME where 10> sqrt(EXP((40.47-COLUMN1),2)+ EXP((73.50-COLUMN2),2))) – happythenewsad 2009-06-30 18:45:00

回答

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 

恕我直言,紅寶石數學庫它是p&可以更好的選擇。

您是否有一個真實世界的使用POW或SQRT查詢示例,您無法使用ActiveRecord創建?

0

我不認爲ActiveRecord直接支持標量函數。組函數,當然,主要是因爲它確保提交給數據庫的查詢很簡潔並且產生儘可能最小的記錄集,這是很有意義的。

另一方面,標量不能提供太多的好處,目前還沒有AR語法,我知道它可以提供它。在您的模型中按需執行計算可能會有實際好處,因爲它可以減少數據庫服務器上的負載(儘管只有很小的一部分)。如果你的DBMS沒有實現POW(),比如說(我相信它本身不是ANSI首選函數名),你會期望AR去做?

我想如果你真的想讓你的DBMS爲你做標量函數,你將不得不提供它們作爲SQL字符串的一部分,正如你所提到的那樣,find_by_sql,指定的選擇列表或某些東西類似。但我會去把這些功能放在你的模型中。