-1

我正在尝试让 Geocoder 在我的应用程序中工作。我正在尝试使用用户的邮政编码对其位置进行地理编码,并且在提交新注册时遇到了此错误:

NoMethodError in Devise::RegistrationsController#create
undefined method `latitude='

我正在使用 Devise 进行身份验证,这是我对:zip属性的卫生处理,以防万一。下面还有我的用户注册表单。

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:zip, :email, :password, :password_confirmation) }
end

end

这是我的相关用户模型:

class User < ActiveRecord::Base

validates :zip, presence: true
geocoded_by :zip
after_validation :geocode

end

我的注册表单:

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %>
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :zip %>
  <%= f.text_field :zip %> </div>

  <div><%= f.label :password %>
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.submit "Sign up" %></div>
<% end %>

<%= render "devise/shared/links" %>

关于我为什么会收到此错误的任何想法?我是否需要在我的注册表单中包含一个字段来表示经纬度?提前致谢!

编辑

这是我的用户表的架构:

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|

      t.integer :zip
      t.float :latitude
      t.float :longitude
      ## Database authenticatable
      t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""
      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at
      ## Rememberable
      t.datetime :remember_created_at
      ## Trackable
      t.integer  :sign_in_count, :default => 0
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip
   end
  end
end
4

3 回答 3

2

您是否在用户迁移中添加了 latitude:float longitude:float 列?之后运行 rake db:migrate 看看是否有帮助。一个不错的地理编码器教程可以在这里找到

于 2013-10-18T00:56:53.637 回答
1

包含整个堆栈跟踪总是一个好主意,因为那里有很多相关信息。如果您不知道如何阅读,请查看此博客文章:http: //nofail.de/2013/10/debugging-rails-applications-in-development/

我假设您没有运行地理编码器迁移或忘记设置地理编码after_validation :geocode器挂钩正在调用的其他内容。

于 2013-10-17T22:18:16.003 回答
1
class Location < ActiveRecord::Base
belongs_to :user

geocoded_by :address
after_validation :geocode, :if => :address_changed?
end

而不是geocoded_by :zip,你不妨试试geocoded_by :address。地理编码器可识别地址字段中的邮政编码。让我知道这个是否奏效

于 2015-10-18T19:58:11.010 回答