【发布时间】:2015-06-25 11:23:09
【问题描述】:
这方面的信息真的很难找到。问题的关键在于我有一个 Rails 3.2 应用程序,它可以访问一个 MySQL 数据库表,该表的列类型为POINT。如果没有非本地代码,rails 不知道如何解释它,这很好,因为我只在内部数据库查询中使用它。
然而,问题是它被强制转换为整数,如果为空则强制为空。 MySQL 不允许该字段为 null,因为上面有索引,并且整数是无效的,所以这实际上意味着我无法通过 rails 创建新记录。
我一直在寻找一种在插入数据库之前更改值的方法,但我的轨道还不够亮,无法将其拉下来。到目前为止,我已经尝试了以下方法:
...
after_validation :set_geopoint_blank
def set_geopoint_blank
raw_write_attribute(:geopoint, '') if geopoint.blank?
#this results in NULL value in INSERT statement
end
---------------------------
#thing_controller.rb
...
def create
@thing = Thing.new
@thing.geopoint = 'GeomFromText("POINT(' + lat + ' ' + lng + ')")'
@thing.save
# This also results in NULL and an error
end
---------------------------
#thing_controller.rb
...
def create
@thing = Thing.new
@thing.geopoint = '1'
@thing.save
# This results in `1` being inserted, but fails because that's invalid spatial data.
end
对我来说,理想的情况是能够强制 rails 将字符串 'GeomFromText(...)' 放入它创建的插入语句中,但我不知道该怎么做。
等待无所不知的社区的想法和意见....
【问题讨论】:
-
您是否看过 stackoverflow.com/questions/12716797/… 的原始插入和 stackoverflow.com/questions/4995428/… 处理地理空间?
标签: ruby-on-rails-3 activerecord