Было довольно много вопросов о типах пространственных данных mysql, однако мой более конкретно описывает, как лучше иметь дело с ними в архитектуре rails MVC.
У меня есть форма ввода, где администратор может создать новую достопримечательность, скажем, ресторан и ввести некоторую информацию. Они также могут вводить удобочитаемую широту и долготу в десятичном формате.
Однако для расчета расстояния и т. Д. Я храню данные о местоположении в качестве пространственной точки в базе данных.
Поэтому мой вопрос, как лучше всего справиться с этим в архитектуре MVC в рельсах?
Вот несколько идей, которые у меня были, но ничто не кажется чистым:
Вызов: метод after_filter, который принимает новый экземпляр объекта и выполняет необработанное обновление SQL, которое обрабатывает доброту "GeomFromText ('POINT (lat long)'))". Проблема в том, что "lat / long" будет текстовыми полями в моей форме создания, хотя это нарушает чистую архитектуру form_for: object, которую предоставляет rails, поскольку lat / long на самом деле не являются атрибутами, они просто позволяют человеческие входные значения, которые не являются MySQL пространственными.
Может быть, создать триггер в БД для запуска после вставки строки, которая обновляет эту строку? Я понятия не имею, и не похоже, чтобы эти триггеры имели доступ к широте / долготе, если только я не сохранил широту и долготу, а также пространственную точку, а затем создал строку в БД с десятичными числами широты и долготы. , а затем запустил триггер после создания, чтобы обновить пространственный. Я думаю, что я мог бы также сделать это с after_filter, если бы я добавил столбцы lat / long в модель.
Есть еще идеи? Я думаю, что сохранение широты / долготы является излишним, поскольку я действительно буду использовать пространственную точку для вычисления расстояния и т. Д., Но это может быть необходимо, если я разрешу редактирование человеком.