【Ruby on Rails】 우편 번호에서 주소를 자동 입력
목표
개발 환경
루비 2.5.7
Rails 5.2.4.3
OS: macOS Catalina
전제
※◯◯◯를 선택하면 설명 등이 나오므로,
잘 모르는 경우의 참고로 해 주시면 좋겠습니다.
homes 컨트롤러를 작성해, 이하를 기술 완료.
config/routes.rbroot 'homes#top'
get 'mypage', to: 'homes#mypage'
app/controllers/homes_controller.rbclass HomesController < ApplicationController
def top
end
def mypage
end
end
흐름
1 devise에서 주소를 입력하여 로그인할 수 있도록 허용
2 gem 'jp_prefecture', gem 'jquery-rails' 도입
3 jquery.jpostal.js 도입
4 application.js 편집
1, devise로 로그인
루비 2.5.7
Rails 5.2.4.3
OS: macOS Catalina
전제
※◯◯◯를 선택하면 설명 등이 나오므로,
잘 모르는 경우의 참고로 해 주시면 좋겠습니다.
homes 컨트롤러를 작성해, 이하를 기술 완료.
config/routes.rbroot 'homes#top'
get 'mypage', to: 'homes#mypage'
app/controllers/homes_controller.rbclass HomesController < ApplicationController
def top
end
def mypage
end
end
흐름
1 devise에서 주소를 입력하여 로그인할 수 있도록 허용
2 gem 'jp_prefecture', gem 'jquery-rails' 도입
3 jquery.jpostal.js 도입
4 application.js 편집
1, devise로 로그인
root 'homes#top'
get 'mypage', to: 'homes#mypage'
class HomesController < ApplicationController
def top
end
def mypage
end
end
1 devise에서 주소를 입력하여 로그인할 수 있도록 허용
2 gem 'jp_prefecture', gem 'jquery-rails' 도입
3 jquery.jpostal.js 도입
4 application.js 편집
1, devise로 로그인
참고 :여기에서 상세하게 설명하고 있습니다.
Gemfile
gem 'devise'
터미널
$ bundle install
$ rails g devise:install
$ rails g devise User
하기 기술을 추가.
db/migrate/xxxxxxxxxxxxx_devise_create_users.rb
...
<-- ここから-->
t.integer :postal_code, null: false
t.string :prefecture_code, null: false
t.string :city, null: false
t.string :street, null: false
t.string :other_address # 番地以降の住所がない場合もあるため、null: falseはつけない
<-- ここまでを追加 -->
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
devise:controller
터미널
rails g devise:controllers users
app/controllers/users/registrations_controller.rb
# frozen_string_literal: true
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
# before_action :configure_account_update_params, only: [:update]
...
# protected
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :postal_code, :prefecture_code, :city, :street, :other_address])
end
# If you have extra params to permit, append them to the sanitizer.
# def configure_account_update_params
# devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
# end
# The path used after sign up.
def after_sign_up_path_for(resource)
mypage_path
end
# The path used after sign up for inactive accounts.
# def after_inactive_sign_up_path_for(resource)
# super(resource)
# end
end
devise:model
미입력을 막기 위해 아래 설명을 추가.
app/models/user.rb
validates :postal_code, presence: true
validates :prefecture_code, presence: true
validates :city, presence: true
validates :street, presence: true
devise:routing
config/routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations',
}
root 'homes#top'
get 'mypage', to: 'homes#mypage'
end
devise:view
터미널
$ rails g devise:views users
form_for 안에 설명.
app/views/devise/registrations/new.html.erb
form_for...
<div class="field">
<%= f.label :postal_code %><br>
<%= f.text_field :postal_code %>
</div>
<div class="field">
<%= f.label :prefecture_code %><br>
<%= f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :name, :name %>
</div>
<div class="field">
<%= f.label :city %><br>
<%= f.text_field :city %>
</div>
<div class="field">
<%= f.label :street %><br>
<%= f.text_field :street %>
</div>
<div class="field">
<%= f.label :other_address %><br>
<%= f.text_field :other_address %>
</div>
...
이것으로 주소를 입력하는 신규 등록 화면의 완성입니다.
2, gem 추가
Gemfilegem 'jp_prefecture' # 都道府県コードから都道府県名を変換するgem
gem 'jquery-rails' # RailsでjQueryを使えるようにするgem
터미널$ bundle install
3, jquery.jpostal.js 도입
htps : // 기주 b. 이 m/마늘/j 쿠에 ry. j포s타l. js/
상기 URL로 천이 후, 녹색의 「Code」탭을 눌러,
빨간색 원 부분에서 zip 파일을 다운로드.
압축을 풀면 "jquery.jpostal.js"의 파일을 찾습니다.
이 파일을 app/assets/javascripts 아래에 저장.
4, application.js 편집
app/assets/javascripts/application.js//= require rails-ujs <--削除
//= require jquery <--追加
//= require jquery_ujs <--追加
//= require activestorage
//= require turbolinks
//= require jquery.jpostal <--追加
//= require_tree .
$(function() {
$(document).on('turbolinks:load', () => {
$('#user_postal_code').jpostal({
postcode : [
'#user_postal_code'
],
address: {
"#user_prefecture_code": "%3", // # 都道府県が入力される
"#user_city" : "%4%5", // # 市区町村と町域が入力される
"#user_street" : "%6%7" // # 大口事務所の番地と名称が入力される
}
});
});
});
// # 入力項目フォーマット
// # %3 都道府県
// # %4 市区町村
// # %5 町域
// # %6 大口事業所の番地 ex)100-6080
// # %7 大口事業所の名称
잘 작동하지 않을 때
아마도 turbolinks의 거동이 이상해질 가능성이 높기 때문에,
link 이전 link_to에
data: {"turbolinks"=>false}
를 작성하여 해결할 수 있습니다.
아래 내용을 맨 위에 추가
app/views/devise/registrations/new.html.erb<script type="text/javascript" src="//jpostal-1006.appspot.com/jquery.jpostal.js"></script>
참고
gem 'jp_prefecture' # 都道府県コードから都道府県名を変換するgem
gem 'jquery-rails' # RailsでjQueryを使えるようにするgem
$ bundle install
htps : // 기주 b. 이 m/마늘/j 쿠에 ry. j포s타l. js/
상기 URL로 천이 후, 녹색의 「Code」탭을 눌러,
빨간색 원 부분에서 zip 파일을 다운로드.
압축을 풀면 "jquery.jpostal.js"의 파일을 찾습니다.
이 파일을 app/assets/javascripts 아래에 저장.
4, application.js 편집
app/assets/javascripts/application.js//= require rails-ujs <--削除
//= require jquery <--追加
//= require jquery_ujs <--追加
//= require activestorage
//= require turbolinks
//= require jquery.jpostal <--追加
//= require_tree .
$(function() {
$(document).on('turbolinks:load', () => {
$('#user_postal_code').jpostal({
postcode : [
'#user_postal_code'
],
address: {
"#user_prefecture_code": "%3", // # 都道府県が入力される
"#user_city" : "%4%5", // # 市区町村と町域が入力される
"#user_street" : "%6%7" // # 大口事務所の番地と名称が入力される
}
});
});
});
// # 入力項目フォーマット
// # %3 都道府県
// # %4 市区町村
// # %5 町域
// # %6 大口事業所の番地 ex)100-6080
// # %7 大口事業所の名称
잘 작동하지 않을 때
아마도 turbolinks의 거동이 이상해질 가능성이 높기 때문에,
link 이전 link_to에
data: {"turbolinks"=>false}
를 작성하여 해결할 수 있습니다.
아래 내용을 맨 위에 추가
app/views/devise/registrations/new.html.erb<script type="text/javascript" src="//jpostal-1006.appspot.com/jquery.jpostal.js"></script>
참고
//= require rails-ujs <--削除
//= require jquery <--追加
//= require jquery_ujs <--追加
//= require activestorage
//= require turbolinks
//= require jquery.jpostal <--追加
//= require_tree .
$(function() {
$(document).on('turbolinks:load', () => {
$('#user_postal_code').jpostal({
postcode : [
'#user_postal_code'
],
address: {
"#user_prefecture_code": "%3", // # 都道府県が入力される
"#user_city" : "%4%5", // # 市区町村と町域が入力される
"#user_street" : "%6%7" // # 大口事務所の番地と名称が入力される
}
});
});
});
// # 入力項目フォーマット
// # %3 都道府県
// # %4 市区町村
// # %5 町域
// # %6 大口事業所の番地 ex)100-6080
// # %7 大口事業所の名称
<script type="text/javascript" src="//jpostal-1006.appspot.com/jquery.jpostal.js"></script>
Reference
이 문제에 관하여(【Ruby on Rails】 우편 번호에서 주소를 자동 입력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/japwork/items/8667a076777fab35c0c4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)