2
據紅寶石地理編碼器文件(rubygeocoder.com),它可以使用地理編碼寶石與西納特拉應用紅寶石地理編碼器,但我遇到了問題,得到它的工作並沒有能夠找到任何工作示例或相關的stackoverflow問題。我認爲這個問題是由於它是一個Sinatra應用程序,而不是一個完整的Rails應用程序。問題實現使用西納特拉
我的Gemfile:
source "https://rubygems.org"
ruby '2.1.2'
gem 'dotenv', '~> 0.10.0'
gem 'pg', '~> 0.17.1'
gem 'rack-flash3'
gem "sinatra"
gem "activerecord"
gem "sinatra-activerecord"
gem "geocoder"
gem 'omniauth'
gem 'omniauth-google-oauth2'
gem "sqlite3"
gem "shotgun"
,我想通過搜索(有浮動的經度和緯度列)模型:
class Item < ActiveRecord::Base
extend Geocoder::Model::ActiveRecord
attr_accessor :latitude, :longitude
belongs_to :profile
has_and_belongs_to_many :categories
has_many :reports, dependent: :destroy
}
這裏是app.rb代碼用 '/'路線:
class FL < Sinatra::Base
get '/' do
@items = Item.near('Detroit, MI, US')
puts "ITEMS ARE:"
pp @items
erb :index
end
...
end
以下是相關內容app.rb:
require 'rubygems'
require 'sinatra/base'
require 'sinatra/flash'
require 'sinatra/activerecord'
require 'geocoder'
require 'omniauth'
require 'sinatra/flash'
require 'json'
require 'pp'
require 'rack-flash'
require './models/model_init'
require './helpers/helper'
require './auth'
require './admin'
require './api'
class FL < Sinatra::Base
set :root, File.dirname(__FILE__)
enable :logging
enable :sessions
#set :logging, true
register Sinatra::ActiveRecordExtension
register Sinatra::Flash
set :show_exceptions, true if ENV['RACK_ENV'] == 'development'
use Rack::Session::Cookie, :secret => ENV['RACK_COOKIE_SECRET']
end
最後,這裏是我收到的錯誤:
NoMethodError - undefined method `near' for #<Class:0x0000010750d0b8>:
/Users/bob/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.0/lib/active_record/dynamic_matchers.rb:26:in `method_missing'
/Users/bob/rails_projects/fl2/api.rb:21:in `block in <class:FL>'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]'
/Users/bob/.rvm/gems/ruby-2.1.2/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!'
望着堆棧跟蹤,它看起來像它沒有找到地址解析器包出於某種原因。我不知道,如果它是我缺少一個簡單的配置,或者什麼,我嘗試是不可能沒有一些寶石定製(東西我無法理解在這一點上)。任何洞察力,建議嘗試,或例子將不勝感激。謝謝!
添加我config.ru:
config.ru
require 'bundler/setup'
Bundler.require(:default)
use Bundler.setup(:default) #added this by suggestion
require 'logger'
use Rack::Deflater
Dotenv.load
require "./fl_app"
run FL
實際上,我已經能夠確認它的加載地理編碼器正常,因爲下面的行能夠運行併產生輸出: @location = Geocoder :: Calculations.extract_coordinates([42.44,-83.33]),它只是沒有加載(或因其他原因無法訪問)與模型相關的方法。 –
您能夠加載'Item'類在控制檯或西納特拉單獨的規格? – iain
我不知道如何從西納特拉單獨加載它。我應該能夠嗎?我無法使用導軌控制檯,因爲它不是導軌應用程序。我可以在IRB控制檯加載然而,具有以下步驟:1.需要「西納特拉/ ActiveRecord的」 2.負載「./models/item.rb」。從那裏我可以用Item.new實例化新項目。我不確定這是否回答你的問題。 –