2009-06-30 6 views
0

Active Recordは、findメソッドではPOWおよびSQRTfind_by_sqlでは一般的なSQL関数を認識しません。これを回避するにはどうしたらいいですか? 。ActiveRecordのは、それが理にかなっている最も一般的なcalculation functionalitiesをサポートしていますアクティブレコードSQLクエリの数学関数ですか? (pow、sqrtなど)

+1

どのように使用しようとしているかの例を貼り付けることができます。彼らが仕事をすることを私は保証します。 –

+0

ベンは言った、私は前にこれをやった。コード例を投稿してください。 –

+0

ここに例があります Location.find_by_sql(select * from TABLENAMEここで10> sqrt(EXP((40.47-COLUMN1)、2)+ EXP((73.50-COLUMN2)))) – happythenewsad

答えて

1

:-(そこに何の文献はないように思わ は、他の先進的な使用方法については、必ず経由して、SELECT文の値をカスタマイズすることができます。選択オプション

find(:all, :select => "COUNT(*)") 

個人的に、私はそれは意味が次のステートメントのいずれかのActiveRecordの(およびSQL)を使用することになるだろう例を見つけることができませんでした。

SELECT POW(9, 6) 
531441 
SELECT POW(2, -3) 
0.125 
SELECT SQRT(65536) 
256 

IMHO、Rubyの数学ライブラリは、それがpですより良い選択肢。

ActiveRecordで作成できないPOWまたはSQRTクエリの実際の使用例がありますか?

+0

データベース内のデータを計算するクエリについては、これははるかに優れていますすべてのデータをローカルでフェッチするのではなく、データベース上で計算を行い、スクリプト言語を使って計算を行う... – Smar

0

私はActiveRecordがスカラー関数をまったく直接サポートしていないと思います。データベースに送信されたクエリーを簡潔にして最小限のレコードセットにするためには、グループ機能は確かに後ろからメインであるため、多くの意味があります。

スカラーは多くのメリットがありませんし、現時点では私が知っているAR構文はありません。モデル内で計算を実行することは、データベースサーバーの負荷を軽減するため(オンデマンドではほとんどない可能性が高いにもかかわらず)、実際のメリットがあります。

DBMSがPOW()を実装していない場合(ANSI優先の関数名ではないと思う)、ARの何を期待しているのでしょうか?何をする?

あなたのDBMSにあなたのスカラー関数を実行させたいと思うなら、あなたは言われている通り、find_by_sql、指定された選択リストまたは何かのSQL文字列の一部としてそれらを供給しなければならないと思います。類似。しかし、私はあなたのモデルに関数を入れて行くだろう。

+0

マイク、レコードと値を比較する際に、クエリの複雑さをモデルから抽象化する方法を教えてください?助言がありますか? – happythenewsad