我正在尝试让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" %>
有关为什么我收到此错误的任何想法?我是否需要在我的注册表单中包含一个字段,用于lat和long?提前谢谢!
修改
这是我的用户表的架构:
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
答案 0 :(得分:2)
你是否已将列latitude:float longitude:float添加到用户迁移?中,之后运行rake db:migrate并查看是否有帮助。 可以找到一个很好的Geocoder教程here
答案 1 :(得分:1)
包含整个堆栈跟踪总是一个好主意,因为那里有很多相关信息。如果您不知道如何访问它,请查看此博客文章:http://nofail.de/2013/10/debugging-rails-applications-in-development/
我假设您没有运行地理编码器迁移或忘记设置地理编码器after_validation :geocode
挂钩正在调用的其他内容。
答案 2 :(得分:1)
class Location < ActiveRecord::Base
belongs_to :user
geocoded_by :address
after_validation :geocode, :if => :address_changed?
end
而不是geocoded_by :zip
,您可能想尝试geocoded_by :address
。地理编码器识别地址字段中的邮政编码。如果有效,请告诉我