2013-11-13 1 views
0

У меня установлен Geocoder gem, и я хочу отключить использование API. У меня есть 47 000 координат широты/долготы внутри таблицы zipcode. Я хочу использовать данные, которые у меня есть в моей базе данных, а не API Google.Как настроить Geocoder для использования базы данных для lat/long

Как бы это сделать, чтобы он вызывал таблицу zipcode внутри моей базы данных и находил самые близкие расстояния lat/long.

модель Пользователь:

class User < ActiveRecord::Base 
    has_secure_password 
    attr_accessible :role, :age, :age_end, :password_confirmation, :about_me, :feet, :inches, :password, :birthday, :career, :children, :education, :email, :ethnicity, :gender, :height, :name, :password_digest, :politics, :religion, :sexuality, :user_drink, :user_smoke, :username, :zip_code 
    has_many :users, dependent: :destroy 
    validates_format_of :zip_code, 
        with: /\A\d{5}-\d{4}|\A\d{5}\z/, 
        message: "should be 12345 or 12345-1234" 
    validates_uniqueness_of :email 
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create 
    validates_presence_of :password, :on => :create 
    before_create { generate_token(:auth_token) } 
    ROLES = %w[admin user guest banned] 

    # models/user.rb 
    after_create :setup_gallery 


    def over_18 
     if birthday + 18.years > Date.today 
     errors.add(:birthday, "can't be under 18") 
     end 
    end 

    def age 
     now = Time.now.utc.to_date 
     now.year - birthday.year - ((now.month > birthday.month || (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1) 
    end 

    def to_s; username 
    end 

    def has_role?(role_name) 
    role.present? && role.to_sym == role_name.to_sym 
    end 

    def send_password_reset 
    generate_token(:password_reset_token) 
    self.password_reset_sent_at = Time.zone.now 
    save! 
    UserMailer.password_reset(self).deliver 
    end 

    def generate_token(column) 
    begin 
     self[column] = SecureRandom.urlsafe_base64 
    end while User.exists?(column => self[column]) 
    end 
    end 

ответ

1

Написать свой собственный класс "геокодера", который вы используете. Сначала найдите координаты в своей базе данных, а затем вернитесь к API. Нечто подобное (но это направлено с использованием нескольких движков):

https://gist.github.com/phallstrom/85670d895b3629e481a7

-1

В вашем User.rb, сделать это

def geocode 
    [self.zip_code.latitude, self.zip_code.longitude] 
end 

Теперь запустите User.near(my_user.geocode)

Позволь мне знать, если это помогает.

+0

это ... не ответит на вопрос. – sevenseacat

+0

Если бы вы были вовлечены в нашу частную сеть электронной почты, возможно, вы не сказали бы этого. – OneChillDude

+0

Возможно, я бы этого не сделал, но, увы, я не был и мог только пойти по тому, что вижу здесь. – sevenseacat

 Смежные вопросы

  • Нет связанных вопросов^_^