我正在努力将Geokit应用到我的项目中。我想获取用户输入到创建网站的信息,对地址进行地理编码,并创建创建新纬度和经度的条目。但是,用户不会输入lat或long,因为我们的geokit将为他们执行此操作。总的来说,当用户按下“创建”按钮时,我们的控制器应该获取所有信息(假设它已被验证)对给定地址进行地理编码,并使用生成的lat和long来创建新条目。我有一些大致的想法如何但不完全确定直接更改控制器是否是正确的方法。我已经包含了我的控制器代码以获得视觉帮助。非常感谢提前!
总体问题 - 您在哪里放置地址编码方法并自动使用生成的lat和long来创建其余的数据条目?
class PocsController < ApplicationController
#GET / pocs #GET /pocs.json def指数 @pocs = Poc.all @pocs = Poc.find(:all) @ pocs.sort! {| a,b | a.name.downcase&lt; =&gt; 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 /编辑 def编辑 @poc = Poc.find(params [:id]) 端
#POST / pocs #POST /pocs.json def创建 @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更新 @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
端
#DELETE / pocs / 1 #DELETE /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
端 端
答案 0 :(得分:1)
根据您对问题本身的评论,听起来您正在寻找帮助,找出插入地理编码的位置。根据{{3}},Geokit可以为您处理。所以,你的app / model / Poc.rb应该只需要:
class Poc < ActiveRecord::Base
acts_as_mappable :auto_geocode=>true
end
请注意,您需要名为address
,lat
和lng
的字段(或者需要指定您自己的覆盖)。
由于这定义了before_validation_on_create
,因此无论何时创建新的Poc,它都会自动运行。如果地址字段发生变化,这将不包括更新lat / lng字段的情况......但是通过研究ActiveModel回调,我敢打赌,如果需要,你可以弄清楚如何处理它。 :)