title: How to insert custom value after validation in rails model
body: <p>This has been really difficult to find information on. The crux of it all is that I've got a Rails 3.2 app that accesses a MySQL database table with a column of type <code>POINT</code>. Without non-native code, rails doesn't know how to interpret this, which is fine because I only use it in internal DB queries.</p>
  
  <p>The problem, however, is that it gets cast as an integer, and forced to null if blank. MySQL doesn't allow null for this field because there's an index on it, and integers are invalid, so this effectively means that I can't create new records through rails.</p>
  
  <p>I've been searching for a way to change the value just before insertion into the db, but I'm just not up enough on my rails lit to pull it off. So far I've tried the following:</p>
  
  <pre><code>...
  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
  </code></pre>
  
  <p>To me, the ideal would be to be able to force rails to put the string 'GeomFromText(...)' into the insert statement that it creates, but I don't know how to do that.</p>
  
  <p>Awaiting the thoughts and opinions of the all-knowing community....</p>