[JAVA] [Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture

Cible

** Si vous entrez le code postal sur l'écran d'enregistrement du nouvel utilisateur, les adresses suivantes (jusqu'à l'adresse) seront automatiquement entrées. ** ** ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation minceIntroduction de Bootstrap 3

la mise en oeuvre

1. Introduction du plug-in jQuery

** ① Accédez au lien ci-dessous. ** **

jpostal GitHub

** ② Cliquez sur "Cloner ou télécharger" ** スクリーンショット 2020-06-09 8.12.28.png

** ③ Cliquez sur Télécharger ZIP ** スクリーンショット 2020-06-09 8.12.32.png

** ④ Placez jquery.jpostal.js dans le dossier téléchargé dans ʻapp / assets / javascript`. ** ** スクリーンショット 2020-06-09 8.20.45.png

2. Présentez Gem

Gemfile


gem 'jquery-rails'
gem 'jp_prefecture'

Terminal


$ bundle

application.js


//= require rails-ujs
//= require activestorage
//= require turbolinks 
//= require jquery //Décrit ci-dessous turbolinks
//= require_tree .

3. Ajouter une colonne

Terminal


$ rails g migration AddColumnsToUsers postcode:integer prefecture_code:integer address_city:string address_street:string address_building:string

~_add_columns_to_users.rb


class AddColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :postcode, :integer
    add_column :users, :prefecture_code, :integer
    add_column :users, :address_city, :string
    add_column :users, :address_street, :string
    add_column :users, :address_building, :string
  end
end

Terminal


$ rails db:migrate

4. Modifiez le modèle

user.rb


include JpPrefecture
jp_prefecture :prefecture_code

def prefecture_name
  JpPrefecture::Prefecture.find(code: prefecture_code).try(:name)
end

def prefecture_name=(prefecture_name)
  self.prefecture_code = JpPrefecture::Prefecture.find(name: prefecture_name).code
end

[Explication]

python


include JpPrefecture
jp_prefecture :prefecture_code

➡︎ Conversion automatique du code de préfecture en nom de préfecture.

python


def prefecture_name
  JpPrefecture::Prefecture.find(code: prefecture_code).try(:name)
end

def prefecture_name=(prefecture_name)
  self.prefecture_code = JpPrefecture::Prefecture.find(name: prefecture_name).code
end

➡︎ Rendre possible la référence au nom de la préfecture avec ~ .prefecture_name. Exemple) @ user.prefecture_name peut afficher l'adresse (préfecture) de l'utilisateur correspondant.

5. Modifiez le contrôleur

Ajoutez des informations d'adresse au paramètre fort.

application_controller.rb


def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [
    :email,
    :name,
    :postcode,
    :prefecture_name,
    :address_city,
    :address_street,
    :address_building
  ])
end

6. Modifier la vue

slim:registrations/new.html.slim


/Postscript
= f.label :postcode, 'Code postal'
br
= f.text_field :postcode, autocomplete: 'postcode', class: 'form-control'
br

= f.label :prefecture_name, 'Préfectures'
br
/Afficher 47 préfectures avec menu déroulant
= f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name, { prompt: 'Veuillez sélectionner' }, class: 'form-control'
br

= f.label :address_city, 'Municipalité'
br
= f.text_field :address_city, autocomplete: 'address_city', class: 'form-control'
br

= f.label :address_street, 'adresse'
br
= f.text_field :address_stree, autocomplete: 'address_street', class: 'form-control'
br

= f.label :address_building, 'bâtiment'
br
= f.text_field :address_building, autocomplete: 'address_building', class: 'form-control'
br

7. Créer / modifier un fichier JavaScript

Terminal


$ touch app/assets/javascripts/address_autofill.js

address_autofill.js


$(function() {
  return $('#user_postcode').jpostal({
    postcode: ['#user_postcode'],
    address: {
      '#user_prefecture_code': '%3',
      '#user_address_city': '%4',
      '#user_address_street': '%5%6%7',
    },
  });
});

Recommended Posts

[Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture
[Rails] Implémentation de la fonction de balise à l'aide de la fonction agit-as-taggable-on et de la fonction de complétion d'entrée de balise à l'aide de tag-it
Ruby on Rails Comment implémenter la saisie d'adresse automatique
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
Implémentation des onglets à l'aide de TabLayout et ViewPager
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
[Nuxt / Rails] Implémentation POSTed en utilisant axios et devise_token_auth
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
Implémentation de la suppression d'ajax dans Rails
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] [jQuery] Implémentation de fonction asynchrone avec remote: true et js.erb
Lire l'implémentation de la commutation automatique multi-DB Rails 6 (ActiveRecord :: Middleware :: DatabaseSelector)
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
Implémentation de la validation à l'aide d'expressions régulières
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Différences et utilisation de each_with_index et each.with_index
Implémentation par défaut de Object.equals () et Object.hashCode ()
[Rails] Je vais expliquer la procédure d'implémentation de la fonction follow en utilisant form_with.
Lancement de l'application de réponse Nampure «Réponse automatique Nampure» (version Android) et sa fonction de mise en œuvre
[Android] Implémentation de ListView à défilement latéral à l'aide de RecyclerView
Localisation de l'implémentation de référence JAXB et de DatatypeConverterImpl
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Rails Ajout d'une fonction de connexion facile et facile
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
Acquisition du contenu d'entrée à l'aide de Scanner (Java)
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Mise en œuvre de la validation qui maintient l'unicité