No.3ベストアンサー
- 回答日時:
だいぶできたようですね。
こちらもMacでOSX10.9ですので、ほぼ同じです。
少し気になる点を、
t.integer :Zip_Code
と整数型になっていますが、0から始まる郵便番号もありますので、
t.stringをした方が良いように思います。
それと、Zip_Codeにインデックスを設定しておく方が検索が速くなります。
インデックスはmigrationでadd_indexで後から設定できます。
実際にやってみて気がついたのですが、
同じ郵便番号で違う住所が結構有るのです。郵便番号から一意に住所が決められないのです。それと
No.2の回答欄にもあるように、
札幌市中央区大通西(1~19丁目)
のようにそのままでは使えない住所があります。
住所録を作成するために使うのだと思うので、
住所録本体(例えばaddress_book)をscaffoldなどで作成します。
当方で作成した住所録は、レコードを新規作成するときに(new)郵便番号だけを入れるフォームにし、ボタンを押すと、住所入力用フォームに飛ぶようにしています。新規作成が二段階になっています。この住所新規作成用のフォームには氏名、住所(郵便番号からリレーションで自動入力)、それと郵便番号から検索された住所(同一郵便番号で複数の住所があったときに参考になるように)を表示するようににしています。
先にも書きましたが、郵便番号から直接住所を特定できないことがあるための対策です。
返信が大変おそくなってしまい申し訳ございません。
ヒントを元に、ようやく完成いたしました!
(1)新規作成
rails new address_book
(2)ディレクトリ移動
cd address_book
(3)scaffold作成
rails g scaffold member name:string Zip_code:string Address:string
(4)zipsコントローラーの作成
rails g controller zips
(5)Zipモデルの作成
rails g model Zip
address/db/migrate/201407********_create_zips.rbを編集
class CreateZips < ActiveRecord::Migration
def change
create_table :zips do |t|
t.string :Zip_Code
t.string :State
t.string :City
t.string :Address
end
add_index :zips, :Zip_Code
end
end
(6)データファイルの準備
1.郵便局のホームページよりCSVファイル(KEN_ALL.CSV)をダウンロード
2.CSVファイルをUTF8に変換する
3.address/dbの下にファイルを配置する
4.address/db/seeds.rbを以下のように編集
require 'csv'
CSV.foreach("db/KEN_ALL.CSV") do |row|
h = {
Zip_Code: row[2],
State: row[6],
City: row[7],
Address: row[8]
}
print h
Zip.create(h)
end
(7)テーブルの作成
rake db:migrate
(8)データのインポート
rake db:seed
(10分以上待つ)
(9)memberモデルの編集
address/app/models/member.rb
class Member < ActiveRecord::Base
has_one :zips
end
(10)Zipモデルの編集
address/app/models/zip.rb
class Zip < ActiveRecord::Base
belongs_to :member
end
(11)membersコントローラーの編集
address/app/controllers/members_controller.rb
のcreateメソッドとupdateメソッドを以下のように修正。
def create
if params[:serach] # serachボタンが押された場合の処理
zip=Zip.where("Zip_Code = ?", params[:member][:Zip_code]).all
zip.each do |z|
@State=z[:State]
@City=z[:City]
@Address=z[:Address]
end
@Addresses=@State + @City + @Address
#logger.debug(@Addresses)
@member = Member.new(name: params[:member][:name], Zip_code: params[:member][:Zip_code], Address: @Addresses)
render :new
else #登録ボタンが押されたときの処理
@member = Member.new(member_params)
respond_to do |format|
if @member.save
format.html { redirect_to @member, notice: 'Member was successfully created.' }
format.json { render :show, status: :created, location: @member }
else
format.html { render :new }
format.json { render json: @member.errors, status: :unprocessable_entity }
end
end
end
end
def update
if params[:serach] # serachボタンが押された場合の処理
zip=Zip.where("Zip_Code = ?", params[:member][:Zip_code]).all
zip.each do |z|
@State=z[:State]
@City=z[:City]
@Address=z[:Address]
end
@Addresses=@State + @City + @Address
#logger.debug(@Addresses)
@member = Member.new(name: params[:member][:name], Zip_code: params[:member][:Zip_code], Address: @Addresses)
render :edit
else
#登録ボタンが押されたときの処理
respond_to do |format|
if @member.update(member_params)
format.html { redirect_to @member, notice: 'Member was successfully updated.' }
format.json { render :show, status: :ok, location: @member }
else
format.html { render :edit }
format.json { render json: @member.errors, status: :unprocessable_entity }
end
end
end
end
(12)viewファイルの編集
address/app/views/members/_form.html.erbを編集
<div class="field">
<%= f.label :Zip_code %><br>
<%= f.text_field :Zip_code %>
<%= f.submit("search",:name=>"serach",:id=>"serach") %> ←*これを追加
</div>
(13)サーバーを立ち上げる
rails s
このやり方が正しいやり方か分かりませんが、試行錯誤の末なんとか完成しました。
最後までお付き合いいただきましてありがとうございました★
今後はこのアプリを元にさらに改良を重ねてまいりたいと思います。
No.2
- 回答日時:
No.1です。
まず、郵便番号のデータベースを作る必要があるのですが、
質問者さんのRubyのプログラムをどの程度書けるのか分かりませんので、まず概略だけを書いておきます、それと
使用しているOSも書いてください。
郵便番号データは
http://www.post.japanpost.jp/zipcode/dl/kogaki.h …
から「全国一括」をダウンロードして、基本的な部分だけにしてください。表計算ソフトでもできますし、プログラムを書いてやっても構いません。
最初の方は
600000北海道札幌市中央区以下に掲載がない場合
640941北海道札幌市中央区旭ケ丘
600041北海道札幌市中央区大通東
600042北海道札幌市中央区大通西(1~19丁目)
で必要なデータ、
郵便番号、都道府県名、市区町村名、町域名だけにします。上のような感じです。
これをデータベースに登録します。(テーブル1つに全部読み込ませた方が楽かも)
コンパクトなデータにしたいのでしたら、
都道府県名、市区町村名は重複がいっぱい有りますので、
テーブルを3つに分けています。
都道府県名と全国地方公共団体コードの上位2桁で1つのテーブルを作り
市区町村名と全国地方公共団体コードでテーブルを作り
町域名と全国地方公共団体コード、郵便番号でテーブルを
以上のようにすると、コンパクトになります。こちらではこのように作りました。
このあたりのプログラムもあるのですが、どうしましょうか???
返信が大変遅くなって申し訳ございません。テーブル作成でつまずいておりました。
とりあえず以下の手順でやっとテーブル作成→データ挿入→HTML画面作成まで行きました。
以下の手順で操作しました。
(1)コンソール画面より新規作成
rails new address
(2)ディレクトリをaddressに移動
cd address
(3)zipモデルを作成
rails g model zip
(4)address/db/migrateの下にできた2014********_create_zips.rbを以下のように作成。
class CreateZips < ActiveRecord::Migration
def change
create_table :zips, id: false do |t|
t.integer :Jis_Code
t.integer :Old_Zip_Code
t.integer :Zip_Code
t.string :State_Kana
t.string :City_Kana
t.string :Address_Kana
t.string :State
t.string :City
t.string :Address
t.integer :AUX1
t.integer :AUX2
t.integer :AUX3
t.integer :AUX4
t.integer :AUX5
t.integer :AUX6
end
end
end
(5)「rake db:migrate」コマンドを実行。
sqliteへzipテーブル作成。
(6)KEN_ALL.CSVをホームページよりダウンロード後、ファイルの文字コードをutf-8に変換。
(これをやらないとこの後の手順でrake aborted!とエラーメッセージが表示されます。)
(7)KEN_ALL.CSVをaddress/dbの下に配置
(8)address/db/seeds.rbを編集
require 'csv'
CSV.foreach("db/KEN_ALL.CSV") do |row|
h = {
Jis_Code: row[0],
Old_Zip_Code: row[1],
Zip_Code: row[2],
State_Kana: row[3],
City_Kana: row[4],
Address_Kana: row[5],
State: row[6],
City: row[7],
Address: row[8],
AUX1: row[9],
AUX2: row[10],
AUX3: row[11],
AUX4: row[12],
AUX5: row[13],
AUX6: row[14]
}
p h
Zip.create!(h)
end
(9)「rake db:seed」コマンドでcsvファイルをインポート(約10分かかりました)
***これでやっとsqlite3によるzipテーブルの作成ができました。***
続いて表示するための画面作りをしました。
(10)まずコントローラーの作成
rails g controller zip
(11)ルーティングの設定
address/config/routes.rbを以下のように編集
Rails.application.routes.draw do
root to: "zip#index"
end
(12)htmlファイル作成
address/app/views/zipの下に「index.html.erb」を新規作成。
このファイルを以下のように書きました。
<h1>郵便番号から住所を検索する</h1>
<%= form_tag do %>
郵便番号を入力してください<br>
<%= text_field_tag(:zipcode) %>
<%= submit_tag("郵便番号から自動入力") %> <%= text_field_tag(:address) %>
<% end %>
やっとここまできましたがこのzipモデルとどう結びつけてかけばよいかわかりません。。ここまで来るとあと一歩というところだと思いますが、ここからつまずいております。
ちなみに当方の開発環境はruby 2.0.0p451, rails 4.1.1 OSはMACです。
よろしくお願いいたします。
No.1
- 回答日時:
大量の住所を入力する必要があったので、以前簡単なものを作ったことがあります。
今は使っていないのですが、先ほど探した見たら、それらしきものが見つかりました。
郵便番号から住所を探すのは簡単にできました。こちらを知りたいのでしょうか?
それとも、上のことは自力でできるが、表示や入力をかっこよくしたいいうことでしょうか?
こちらは泥臭いことをやっていて一応使えるレベルですが、あまり参考にならないレベルです。
どちらを知りたいのでしょうか?
>それとも、上のことは自力でできるが、表示や入力をかっこよくしたいいうことでしょうか?
いえいえ、そこまでの事は求めておりません。
当方はRuby on Rails(バージョンは4.0.0)初心者ですので、新規入力、編集、削除の基本的な機能(scaffoldでも出来る機能ですが...)をやっと作る程度のレベルです。
ですので、本当にどのような方法でも構いませんので、住所自動入力機能の作り方をご教示いただけたら幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
郵便番号未記入で発送。果たし...
-
住所に「その他」と書いている...
-
ハガキの右上と左下の7つの四角
-
個別の郵便番号がある住所宛に...
-
自分の家の郵便番号が分からな...
-
郵便番号 郵便物への記載は義...
-
郵便番号を書き間違えた郵便物...
-
クエリーで住所入力支援を使う方法
-
通信事務郵便から住所確認のは...
-
「あて所に尋ねあたりません」...
-
封筒に電話番号を書く場合の位置
-
新築購入後の住所変更について ...
-
郵便物について
-
名前は違ってても、宅急便など...
-
「転送不要」郵便を受け取る方...
-
引越し後 前の住所に来るDMは...
-
一人暮らしの場合の郵便局への...
-
1ヶ月程度の不在。郵便物の転...
-
賃貸で前の住人宛てのDMがよ...
-
転居先の住所を大家さんに教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
郵便番号未記入で発送。果たし...
-
個別の郵便番号がある住所宛に...
-
ハガキの右上と左下の7つの四角
-
住所に「その他」と書いている...
-
郵便番号を書き間違えた郵便物...
-
郵便番号 郵便物への記載は義...
-
スマホのアダルトサイトに郵便...
-
住所から郵便番号は特定できる...
-
自分の家の郵便番号が分からな...
-
スイスへ送るエアメールについて
-
北海道から道外に封筒で郵便物...
-
楽天銀行の新規の口座開設につ...
-
郵便番号が5桁でも届きますか? ...
-
楽天クレジットカードで勤務先
-
Ruby on Railsで住所自動入力作...
-
皆さんは、自分が住んでいる場...
-
通販サイトで、 住所に書き忘れ...
-
ゆうメール… 住所が違うのに届...
-
クエリーで住所入力支援を使う方法
-
手紙住所郵便番号間違えた
おすすめ情報