Il s'agit d'un mémorandum pour importer les éléments du menu déroulant lors de la soumission d'un formulaire avec Rails et de leur affichage à l'aide des données de la base de données.
Importation CSV https://qiita.com/Ryuta1346/items/c21cb70b9879c66c8639 https://qiita.com/SoarTec-lab/items/50e046ea2a2764c12c21 https://docs.ruby-lang.org/ja/latest/class/CSV.html https://qiita.com/3yatsu/items/416411c0a8f696dbf99e https://qiita.com/rllllho/items/672e336a03335cba6b34
Liés au menu déroulant https://qiita.com/HrsUed/items/56677d6c266d8a53ffa7 https://qiita.com/kawakami_shotaro/items/11a677bf34136cb7686d https://qiita.com/colorrabbit/items/b58888506e41d1370fd1 https://crieit.net/posts/Rails-collection-select https://qiita.com/_akira19/items/c218186983f444c2d794
Liste des codes de pays CSV https://qiita.com/tao_s/items/3yy2b90a2751bfbdd585ea
C'est une image d'apparence ↓

Les choix du menu déroulant sont affichés en utilisant les informations de colonne enregistrées dans le DB ↓

Je vais expliquer l'importation CSV et le déroulement du formulaire séparément.
railsLe processus d'importation est effectué à l'aide de la bibliothèque CSV de Ruby. Cette fois, j'ai importé la liste des noms de pays à partir du CSV suivant. J'ai ajouté le fichier CSV créé au répertoire racine.
country.csv
nombre,Nom du pays / région,ISO 3166-Nom anglais en 1,nombre,Trois personnages,Deux personnages,endroit,Chaque division administrative
1,Islande,Iceland,352,ISL,IS,Europe du Nord,ISO 3166-2:IS
2,Irlande,Ireland,372,IRL,IE,Europe de l'Ouest,ISO 3166-2:IE
Pour CSV, j'ai utilisé Country Code List CSV.
J'ai créé le modèle suivant. La colonne region n'est pas utilisée cette fois.
| attribute | type |
|---|---|
| country_name | string |
| region | string |
#Modélisation de pays
$ rails g model Country country_name:string region:string
Le processus d'importation a été ajouté à seeds.rb. Il semble y avoir un fichier séparé créé et Comment exécuter avec la commande runner.
seeds.rb
require "csv"
#Spécifiez le chemin d'accès au fichier CSV comme chemin absolu
CSV.foreach("country.csv", headers: true) do |row|
Country.create!(
country_name: row["Nom du pays / région"],
region: row["endroit"]
)
end
Effectuez une importation CSV avec la commande rails.
J'ai également écrit d'autres processus dans le fichier de départ, donc cette fois j'ai tout supprimé de la base de données et réimporté.
#C'est tout ce dont vous avez besoin pour importer un CSV et l'enregistrer dans votre base de données
$ rails db:seed
#Effacez la base de données et réinsérez tout
$ rails db:migrate:reset
$ rails db:seed
#Vérifiez s'il a été importé dans la console des rails
$ rails c
#Vérifiez le nombre de noms de pays importés
> Country.count
249
Modifiez le fichier de vue de l'envoi du formulaire au moment de la nouvelle publication.
Ruby:view/model_names/new.html.erb
#Avant correction
<%= form_with model: @model_name do |f| %>
<%= f.label :country %>
<%= f.text_field :country %>
<%= f.submit "Envoyer" %>
<% end %>
Ruby:view/model_names/new.html.erb
#modifié
<%= form_with model: @model_name do |f| %>
<%= f.label :country %>
<%= f.collection_select :country, Country.all, :id, :country_name, prompt: "Veuillez sélectionner un pays" %>
<%= f.submit "Envoyer" %>
<% end %>
# collection_sélectionner la syntaxe
<%= f.collection_select <Nom de colonne de la destination d'enregistrement>, <Données de tableau à afficher>, <Nom de colonne de la valeur à enregistrer>, <Nom de colonne à afficher>, <option> %>
Veuillez sélectionner un pays avec l'option d'inviteIci L'explication sur la façon d'utiliser collection_select est très facile à comprendre.
Recommended Posts