J'essaie de gérer manuellement certaines colonnes géométriques (spatiales) dans un modèle de rails.Comment empêcher les rails d'échapper des valeurs dans SQL pour une colonne particulière?
Lors de la mise à jour de la colonne de géométrie, je le fais dans des rails:
self.geom="POINTFROMTEXT('POINT(#{lat},#{lng})')"
Quelle est la valeur que je veux être dans les mises à jour SQL et ainsi être évaluées par la base de données. Cependant au moment où cela a été à travers la magie de l'enregistrement actif, il sort comme:
INSERT INTO `places` (..., `geom`) VALUES(...,'POINTFROMTEXT(\'POINT(52.2531519,20.9778386)\')')
En d'autres termes, les guillemets sont échappés. C'est bien pour les autres colonnes car cela empêche l'injection SQL, mais pas pour ça. Les valeurs sont garantis flotteurs, et je veux la mise à jour ressembler à:
INSERT INTO `places` (..., `geom`) VALUES(...,'POINTFROMTEXT('POINT(52.2531519,20.9778386)')')
est-il donc un moyen de mettre hors échapper pour une colonne particulière? Ou une meilleure façon de le faire? (J'ai essayé d'utiliser GeoRuby + adaptateur spatial, et adaptateur spatial semble trop bogué à moi, plus je n'ai pas besoin de toutes les fonctionnalités - donc essayer de le faire directement).
Je ne sais pas exactement quel est le problème ici. Si ces guillemets n'étaient pas échappés, vous obtiendriez une erreur SQL en raison de guillemets incorrectement fermés. Si vous récupérez les données sauvegardées, les caractères échappés ne doivent pas être présents. –
Bon point sur les guillemets incorrectement fermés. Cependant, je n'ai jamais besoin de récupérer cette valeur - elle est seulement utilisée dans un index spatial. J'essaie d'obtenir l'équivalent de ceci: UPDATE place les ensembles geom = POINTFROMTEXT ('POINT (52,253,20.977') – frankodwyer
une autre façon de le regarder, c'est quand les colonnes lat, lng sont mises à jour, je veux mettre à jour geom. Ma migration pour geom Je fais ce qui suit après avoir ajouté la colonne: exécuter "UPDATE' # {table} 'set geom = POINTFROMTEXT (CONCAT ('POINT (', lat, '', lng, ')'))). J'aime déclencher une mise à jour similaire à chaque fois que lat ou lng est modifié - soit dans un trigger DB ou via des rails.J'utilise actuellement un callback before_save, ce qui entraîne le problème ci-dessus.Je ne sais pas comment définir une base de données déclencher dans une migration – frankodwyer