私は、レールモデルのいくつかのジオメトリ(空間)列を手動で管理しようとしています。ジオメトリ列を更新する場合特定の列のSQLでレールがエスケープするのを止める方法を教えてください。
私はレールでこれを行う:
私はSQLの更新になりたいので、データベースによって評価された値であるself.geom="POINTFROMTEXT('POINT(#{lat},#{lng})')"
。しかし、これは、アクティブなレコードの魔法を経た時点で、それはのように出てくる:つまり
INSERT INTO `places` (..., `geom`) VALUES(...,'POINTFROMTEXT(\'POINT(52.2531519,20.9778386)\')')
、引用符がエスケープされています。 SQLインジェクションを防止するので、これは他のカラムでは問題ありません。値は浮動小数点数であることが保証され、私は更新が見えるようにしたいされています
INSERT INTO `places` (..., `geom`) VALUES(...,'POINTFROMTEXT('POINT(52.2531519,20.9778386)')')
だから、特定の列のためにオフエスケープ有効にする方法はありますか?これを行うより良い方法は?
(私は、私にはあまりにもバグのようで、プラス私は、すべての機能を必要としない+空間アダプタ、および空間的なアダプタをGeoRubyを使用して試してみた - ので、直接それをやろうとしています)。
私はこの問題が何であるかについてはあまりよく分かりません。これらの引用符がエスケープされなかった場合、引用符が正しくないためにSQLエラーが発生します。保存されたデータを取得する場合、エスケープされた文字は表示されません。 –
誤って閉じられた引用符についての良い点。しかし、私はこの値を取得する必要はありません。空間インデックスでのみ使用されます。私はこれに相当するものを取得しようとしています:更新geom = POINTFROMTEXT( 'POINT(52,253,20.977') – frankodwyer
それを見て別の方法は、lat、lng列が更新されるたびに、私はgeomを更新したいです。私の移行のgeom私は列を追加した後、次のようにします: "update##{table}' set geom = POINTFROMTEXT(CONCAT( 'POINT('、lat、 ''、lng、 ')')) " DBトリガーやレール経由で、latやlngが変更されたときにも、同様の更新をトリガーしたいのですが、私は現在before_saveコールバックを使用していますので、上記の問題が発生します。 – frankodwyer