【问题标题】:Setting up Geocoder with Sinatra and ActiveRecord?使用 Sinatra 和 ActiveRecord 设置地理编码器?
【发布时间】:2018-07-25 13:24:01
【问题描述】:

我有一个使用 ActiveRecord 和 Sinatra 访问的 MYSQL 数据库。我正在尝试对表中的记录执行某些地理定位任务。

但是,我认为我的语法是错误的,因为扩展地理编码器类会使我的 CRUD 请求失败:

myapp.rb

require 'rubygems'
require 'sinatra'
require 'active_record'
require 'table_print'
require 'json'

ActiveRecord::Base.establish_connection(
  :adapter  => "mysql2",
  :host     => "localhost",
  :username => "root",
  :database => "orbital"
)

class Post < ActiveRecord::Base
  extend Geocoder::Model::ActiveRecord

 # attr_accessor :latitude, :longitude
end

class Comment < ActiveRecord::Base
  #extend Geocoder::Model::ActiveRecord
end

class MyApp < Sinatra::Application
  #extend Geocoder::Model::ActiveRecord
end

post '/post' do
  @user = params[:user]
  @content = params[:content]
  @latitude = params[:latitude]
  @longitude = params[:longitude]
  @timestamp = params[:timestamp]
  record = Post.create(user: @user, content: @content, longitude: @longitude, latitude: @latitude, timestamp: @timestamp)
  record.save
end

我要执行的查询是: Post.near([@lat, @long], @dist, units: :km).offset(10 * @var.to_i).first(10)

这个 stackoverflow 线程 here 还建议我需要设置其他参数,例如 attr_accessors。如何设置重写上述内容,以便我可以使用 Geocoder 的 near 方法?

【问题讨论】:

  • 在您的 post 方法中,您调用 Post.create 然后再次保存它,这是没有意义的。 Post.create 已经将对象保存到数据库中。您应该同时删除 recordrecord.save

标签: ruby activerecord sinatra geocoder


【解决方案1】:

我通过添加以下内容修复了上述问题:

require 'geocoder'

reverse_geocoded_by :latitude, :longitude

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多