2016-10-19 15 views
1

私は1つの形式で要求される2つのアドレスをジオコードしようとしています。ジオコード2住所ジオコーダーgem

<%= f.input :kotadres %> 
    <%= f.input :location %> 

それらの両方が、このようにGoogleのオートコンプリートで動作:両方のアドレスがデータベースに格納されているため

<script> 
    var input = document.getElementById('student_location'); 
    var autocomplete = new google.maps.places.Autocomplete(input,{componentRestrictions: {country:'be'}}); 
    google.maps.event.addListener(autocomplete, 'place_changed', function(){ 
    var place = autocomplete.getPlace(); 
    }) 
</script> 

<script> 
    var input = document.getElementById('student_kotadres'); 
    var autocomplete = new google.maps.places.Autocomplete(input,{componentRestrictions: {country:'be'}}); 
    google.maps.event.addListener(autocomplete, 'place_changed', function(){ 
    var place = autocomplete.getPlace(); 
    }) 
</script> 

これは、完全に正常に動作します。

今、これらの2つのアドレスをデータベースにジオコードしたいとします。これは何らかの理由で何らかの理由でkotadresをa:latitudeと:longitudeの列に配置しているため、すでに50%で動作していますが、なぜこの属性のみをジオコードするのかわかりません。

これは私の学生のテーブルです:場所が、私はこれを行う方法を思っていた:私は、私は2つの新しい緯度と経度の値を格納するために2つの新しい列を作成する必要があります知っている

create_table "students", force: :cascade do |t| 
    t.string "location" 
    t.float "latitude" 
    t.float "longitude" 
    t.string "kotadres" 
    end 

基本的には、:location属性ではなく:kotadres属性のみをジオコードする理由を理解したいと思います。フォームで

  • 急がせるの両方の入力フィールド(結果:のみ:kotadresがジオコードます)
  • 削除:入力フィールドをkotadres私は、次のことを試してみました(結果:場所は、ジオコーディングされません)

私の学生モデルは次のようになります。誰かがこれら2人の住所をジオコーディングする方法を知っているか、それは常にジオコーディング、なぜ誰かが知っていればのであれば

geocoded_by :location 
after_validation :geocode, if: :location_changed? 

geocoded_by :kotadres 
after_validation :geocode, if: :kotadres_changed? 

:kotadres属性、私は答えを知ることを喜んでより多くの。

+0

あなたは真剣に別のアドレスモデルを使用して、多くの関係を1の設定を検討すべきです。現在の問題は、すべてを単一のモデルに詰め込んでいるという事実にも起因しています。 – max

答えて

0

単一のモデルですべてを行うにはされていない、ここでのトリック:設定するには

class Student 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 
end 

# latitude:float 
# longitude:float 
class Address 
    enum type: [:home, :work, :billing] #etc 
    belongs_to :student 
    geocoded_by :full_street_address 
    after_validation :geocode, if: :full_street_address_changed? 
end 

あなたはどうしたら一度学生のセットアップ複数のアドレスをすることができますフォーム:また

<%= form_for(@student) do |f| %> 
    <%= f.fields_for :addresses do |a| %> 
    <%= a.text_field :full_street_address %> 
    <% end %> 
<% end %> 

あなたを参照してください

class StudentsController 

    def new 
    @student = Student.new do |s| 
     s.addresses.new 
     s.addresses.new 
    end 
    end 

    def create 
    @student = Student.new(student_params) 
    end 

    private 

    def student_params 
     params.require(:student).permit(
     :foo, 
     :bar, 
     addresses_attributes: [ 
      :full_street_address 
     ] 
    ) 
    end 
end 

:セットアップにコントローラを必要とする

+0

これは修正されたものではなく、正しい方向への微調整であり、状況に合わせてソリューションを調整する必要があります。 – max

+0

ユーザーの住所と現在の場所の両方を把握したい場合は、生徒と住所の場所を別々にジオコードします。 – max

関連する問題