1

我目前正在将 Geokit 实施到我的项目中。我想获取用户输入到创建网站的信息,对地址进行地理编码,并使用创建的新纬度和经度创建条目。但是,用户不会输入 lat 或 long,因为我们的 geokit 会为他们输入。总的来说,当用户按下“创建”按钮时,我们的控制器应该获取所有信息(假设它已经过验证)对给定地址进行地理编码,并使用生成的纬度和经度来创建新条目。我有一些大致的想法,但不确定直接更改控制器是否是正确的方法。我已经包含了我的控制器代码以获得视觉帮助。提前谢谢了!

总体问题 - 您将地址地理编码并自动使用生成的纬度和经度来创建其余数据条目的方法放在哪里?

class PocsController < ApplicationController

# GET /pocs # GET /pocs.json def index @pocs = Poc.all @pocs = Poc.find(:all) @pocs.sort!{ |a,b| a.name.downcase <=> b.name.downcase }

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @pocs }
end

结尾

# GET /pocs/1 # GET /pocs/1.json def show @poc = Poc.find(params[:id]) @pocs = Poc.all

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @poc }
end

结尾

# GET /pocs/new # GET /pocs/new.json def new @poc = Poc.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @poc }
end

结尾

# GET /pocs/1/edit def edit @poc = Poc.find(params[:id]) end

# POST /pocs # POST /pocs.json def create @poc = Poc.new(params[:poc])

respond_to do |format|
  if @poc.save
    format.html { redirect_to @poc, notice: 'Poc was successfully created.' }
    format.json { render json: @poc, status: :created, location: @poc }
  else
    format.html { render action: "new" }
    format.json { render json: @poc.errors, status: :unprocessable_entity }
  end
end

结尾

# PUT /pocs/1 # PUT /pocs/1.json def update @poc = Poc.find(params[:id])

respond_to do |format|
  if @poc.update_attributes(params[:poc])
    format.html { redirect_to @poc, notice: 'Poc was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @poc.errors, status: :unprocessable_entity }
  end
end

结尾

# 删除 /pocs/1 # 删除 /pocs/1.json def destroy @poc = Poc.find(params[:id]) @poc.destroy

respond_to do |format|
  format.html { redirect_to pocs_url }
  format.json { head :no_content }
end

结束结束

4

1 回答 1

1

根据您对问题本身的评论,听起来您正在寻求帮助以确定在哪里插入地理编码。根据文档(特别是“自动地理编码”部分),Geokit 可以为您处理这个问题。所以,你的 app/model/Poc.rb 应该只需要:

class Poc < ActiveRecord::Base
  acts_as_mappable :auto_geocode=>true
end

请注意,您需要名为addresslat和的字段lng(或者需要指定您自己的覆盖)。

由于这定义了 a before_validation_on_create,因此每当创建新的 Poc 时它都会自动运行。如果地址字段发生更改,这将不包括更新 lat/lng 字段的情况......但是通过研究 ActiveModel 回调,我敢打赌,如果需要,您可以弄清楚如何处理它。:)

于 2014-02-19T01:29:15.150 回答