使用postgresql的地理编码器问题

时间:2016-10-06 18:04:17

标签: ruby-on-rails postgresql google-geocoder rails-geocoder

我有一个名为room的模型,在展示视图中我想显示附近的其他房间。

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

我已使用RailsCasts Episode进行定位。 不幸的是我收到了这个错误:

enter image description here

我该如何使用?

非常感谢任何解决方案的提示!

1 个答案:

答案 0 :(得分:1)

您的rooms表格列距离

您的SQL查询正在创建别名距离。(AS DISTANCE)。

因此PostgreS引起了模糊的列错误。

此查询是由您使用的gem生成的我建议您将列距离的列名称更改为 my_distance 之类的其他内容或不会与之冲突的内容gem生成的查询。