【发布时间】: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已经将对象保存到数据库中。您应该同时删除record和record.save。
标签: ruby activerecord sinatra geocoder