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.
rails
Le 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