Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.
This repository was archived by the owner on Nov 9, 2017. It is now read-only.

Geom field not converted to hex_ewkb when using Model.create in Rails 3.1.0 #26

@ryanwilliams

Description

@ryanwilliams

Creating a new record using

Foo.create(:geom => Point.from_x_y_z(-1.6, 2.8, -3.4, 4326))

Doesn't work, but this does:

f = Foo.create
f.geom = Point.from_x_y_z(-1.6, 2.8, -3.4, 4326)
f.save

With some debugging it appears that the PostgreSQLAdapter#quote method inside lib/spatial_adapter/postgresql.rb wasn't hit when using 'create', but was when updating. This was true even for non-geom fields.

Here is the output using the example provided in the README:

>> pt = TablePoint.new(
?>   :data => "Hello!", 
?>   :geom => Point.from_x_y_z(-1.6, 2.8, -3.4, 123))
   (0.5ms)  SELECT * FROM geometry_columns WHERE f_table_name = 'table_points'
=> #<TablePoint id: nil, data: "Hello!", geom: #<GeoRuby::SimpleFeatures::Point:0x104d5c988 @m=0.0, @x=-1.6, @with_m=false, @z=-3.4, @with_z=true, @srid=123, @y=2.8>>
>> pt.save
   (0.1ms)  BEGIN
  SQL (1.2ms)  INSERT INTO "table_points" ("data", "geom") VALUES ($1, $2) RETURNING "id"  [["data", "Hello!"], ["geom", #<GeoRuby::SimpleFeatures::Point:0x104d5c988 @m=0.0, @x=-1.6, @with_m=false, @z=-3.4, @with_z=true, @srid=123, @y=2.8>]]
   (0.2ms)  ROLLBACK
ActiveRecord::StatementInvalid: PGError: ERROR:  parse error - invalid geometry
HINT:  You must specify a valid OGC WKT geometry type such as POINT, LINESTRING or POLYGON
: INSERT INTO "table_points" ("data", "geom") VALUES ($1, $2) RETURNING "id"
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:976:in `get_last_result'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:976:in `exec_cache'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:548:in `exec_query'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract_adapter.rb:222:in `log'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract_adapter.rb:217:in `log'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:546:in `exec_query'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/database_statements.rb:54:in `exec_insert'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/database_statements.rb:81:in `insert'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/relation.rb:68:in `insert'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/persistence.rb:306:in `create'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/timestamp.rb:51:in `create'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/callbacks.rb:268:in `create'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/callbacks.rb:390:in `_run_create_callbacks'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/callbacks.rb:81:in `send'
... 4 levels...
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/callbacks.rb:390:in `_run_save_callbacks'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/callbacks.rb:81:in `send'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.0.rc4/lib/active_support/callbacks.rb:81:in `run_callbacks'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/callbacks.rb:264:in `create_or_update'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/persistence.rb:37:in `save'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/validations.rb:50:in `save'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/attribute_methods/dirty.rb:22:in `save'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:241:in `save'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:295:in `with_transaction_returning_status'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/database_statements.rb:183:in `transaction'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:208:in `transaction'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:293:in `with_transaction_returning_status'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:241:in `save'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:252:in `rollback_active_record_state!'
    from /Library/Ruby/Gems/1.8/gems/activerecord-3.1.0.rc4/lib/active_record/transactions.rb:240:in `save'
    from (irb):25>> 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions