2013-10-17 4 views
-1

내 애플 리케이션에서 지오 코더를 작동 시키려고합니다. 나는 자신의 위치를 ​​지오 코딩 사용자의 우편 번호를 사용하려고하고 나는 새로운 가입 제출에이 오류로 실행했습니다 : I 인증을 위해 고안를 사용하고정의되지 않은 메소드`latitude = '지오 코더 레일

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

을, 여기에 :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 
+0

(db/schema.rb 파일의) users 테이블에 대한 스키마를 붙여 넣으십시오. Geocoder gem은 아직 존재하지 않는이 컬럼을 갱신하려고합니다. 마이그레이션을 사용하여 마이그레이션을 추가 할 수 있습니다. –

+0

스키마가 추가되었습니다. 이 마이그레이션을 실행하기 전에 DB를 다시 만들었습니다. – settheline

답변

2

위도 : float 경도 : float를 사용자 마이그레이션에 추가 했습니까?, 그 후에 rake db : migrate를 실행하여 도움이되는지 확인하십시오. 지오 코더의 좋은 튜토리얼은 당신이 geocoded_by :address을 시도 할 수 있습니다,

+0

그래, 두 플로트 열을 추가하고 DB에 변경 사항을 마이 그 레이션. – settheline

+0

안녕하세요, 오류를 더 잘 이해하기 위해 비슷한 앱을 재현했습니다. Devise 및 Geocoder를 설치하고 해당 열을 사용자에게 추가하기 위해 위도, 경도 및 zip에 대한 개별 마이그레이션을 작성했습니다. 예 ... "... | ZIP | 경도 | 위도" ".... | 70112 | -90.0770127 | 29.9595769" Rails 및 Devise의 버전은 무엇입니까? 당신이 사용하고 있습니까? – torresomar

+0

rails 3.2.13 and devise 3.0.3 – settheline

1

항상 관련 정보를 많이 거기에있는 한 전체 스택 트레이스를 포함하는 것이 좋습니다. 이 블로그 게시물을 보려면 어떻게 해야할지 모르겠다면 : http://nofail.de/2013/10/debugging-rails-applications-in-development/ 나는 지오 코더 마이그레이션을 실행하지 않았거나 지오 코더 after_validation :geocode 후크가 호출하는 다른 설정을 잊어 버린 것으로 가정합니다.

+0

멋지다 나는 블로그를 조사 할 것이다, 나는 팁에 감사 할 정도로 RoR에 새롭다. 지오 코더의 Railscast를 따라 갔지만, 나는 틀린 일을 할 수있었습니다. 지오 코더 마이그레이션이란 정확히 무엇을 의미합니까? – settheline

+0

@Omar가 그의 대답에서 언급 한 것과 같은 의미입니다. 데이터베이스 프론트 엔드를 사용하고 db의 열을 살펴보십시오. 위도 열이 있습니까? – phoet

1
class Location < ActiveRecord::Base 
belongs_to :user 

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

보다는 geocoded_by :ziphere 찾을 수 있습니다. 지오 코더는 주소 필드에서 우편 번호를 인식합니다. 이 작동하는지 알려주십시오