Search code examples
ruby-on-railspostgresqlgoogle-geocoderrails-geocoder

Issue with geocoder using postgresql


I have a model called room and in the show view I want to display other rooms nearby.

show.html.erb

<div>
   <% for room in @room.nearbys(10) %>
   <%= image_tag room.photos[0].image.url(:medium) %>
   <%= link_to room.listing_name, room %><br>
   (<%= room.distance.round(2) %> miles away)
   <% end %>
</div>

schema.rb

ActiveRecord::Schema.define(version: 20161006135631) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "active_admin_comments", force: :cascade do |t|
    t.string   "namespace"
    t.text     "body"
    t.string   "resource_id",   null: false
    t.string   "resource_type", null: false
    t.string   "author_type"
    t.integer  "author_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.index ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id", using: :btree
    t.index ["namespace"], name: "index_active_admin_comments_on_namespace", using: :btree
    t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id", using: :btree
  end

  create_table "admin_users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.inet     "current_sign_in_ip"
    t.inet     "last_sign_in_ip"
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
    t.index ["email"], name: "index_admin_users_on_email", unique: true, using: :btree
    t.index ["reset_password_token"], name: "index_admin_users_on_reset_password_token", unique: true, using: :btree
  end

  create_table "photos", force: :cascade do |t|
    t.integer  "room_id"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
    t.index ["room_id"], name: "index_photos_on_room_id", using: :btree
  end

  create_table "rooms", force: :cascade do |t|
    t.string   "listing_name"
    t.string   "accommodation_type"
    t.integer  "persons"
    t.integer  "property"
    t.integer  "living_area"
    t.text     "rooms_total"
    t.text     "features_short"
    t.string   "pets"
    t.string   "smoking"
    t.string   "check_in"
    t.string   "check_out"
    t.string   "location"
    t.text     "distance"
    t.text     "features_long"
    t.text     "detailed_description"
    t.text     "house_rules"
    t.string   "address"
    t.text     "video"
    t.integer  "nightly_price"
    t.integer  "hourly_price"
    t.text     "detailed_price"
    t.boolean  "active"
    t.datetime "created_at",           null: false
    t.datetime "updated_at",           null: false
    t.float    "latitude"
    t.float    "longitude"
  end

  create_table "users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.inet     "current_sign_in_ip"
    t.inet     "last_sign_in_ip"
    t.datetime "created_at",                          null: false
    t.datetime "updated_at",                          null: false
    t.string   "firstname"
    t.string   "lastname"
    t.string   "provider"
    t.string   "uid"
    t.index ["email"], name: "index_users_on_email", unique: true, using: :btree
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
  end

  add_foreign_key "photos", "rooms"
end

I have used the RailsCasts Episode for orientation. Unfortunately I am getting this Error:

enter image description here

How can I make this work?

Any hints for a solution are very appreciated!


Solution

  • Your rooms table have column distance.

    And your SQL query is creating an alias distance.(AS DISTANCE).

    Hence PostgreS is raising ambiguous column error.

    This query is generated by gem which you are using I recommend you to change the column name of column distance to something else like my_distance or something which will not conflict with the query generated by gem.