[RUBY] Je souhaite importer les éléments du menu déroulant lors de la soumission d'un formulaire dans Rails en CSV et les afficher à partir des données de la base de données.

introduction

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.

environnement

URL de référence

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

Cible

  1. Choix du menu déroulant d'importation CSV
  2. Affichez les éléments de sélection dans le menu déroulant en utilisant les données du DB

C'est une image d'apparence ↓ form1.png

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

la mise en oeuvre

Je vais expliquer l'importation CSV et le déroulement du formulaire séparément.

1. Choix du menu déroulant d'importation CSV

  1. Créez un modèle de pays pour enregistrer la liste des noms de pays
  2. Ajoutez le processus d'importation à db / seedss.rb
  3. Exécutez le processus d'importation avec la commande 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.

1. Création d'un modèle de pays

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

2. Ajouter un processus d'importation

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

3. Exécutez le processus d'importation

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

2. Affichez les éléments de sélection dans le menu déroulant en utilisant les données du DB

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> %>

Ici L'explication sur la façon d'utiliser collection_select est très facile à comprendre.

Apprendre

Recommended Posts

Je souhaite importer les éléments du menu déroulant lors de la soumission d'un formulaire dans Rails en CSV et les afficher à partir des données de la base de données.
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
[Pour les débutants] Je souhaite saisir automatiquement des données pré-enregistrées dans le formulaire de saisie avec une commande de sélection.
Je souhaite analyser morphologiquement le journal stocké dans la base de données et le stocker dans la base de données pour classer les messages 1
Je veux utiliser une petite icône dans Rails
Je souhaite définir une fonction dans la console Rails
Je souhaite contrôler l'affichage de la barre de navigation de gestion supérieure (menu Contrôle) dans Liferay 7 / DXP
En Java, je souhaite couper plusieurs caractères spécifiés uniquement du début et de la fin.
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
Je veux appeler une méthode et compter le nombre
[Rails] Que faire lorsque l'erreur Aucune base de données sélectionnée et Base de données inconnue apparaît dans db: migrate
[Controller] Je veux récupérer la valeur numérique d'une colonne spécifique de la base de données (mon mémo)
Tri des données Décroissant, croissant / Rails
[Rails] Je souhaite ajouter des données aux paramètres lors de la transition avec link_to
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
J'ai résumé les points à noter lors de l'utilisation combinée des ressources et des ressources
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
[Ruby] Je souhaite afficher les éléments publiés par ordre de date la plus récente
[Rails 6] cocoon_ Ajouter des attributs d'identifiant et de données au formulaire à ajouter
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
[Rubiy] Je veux créer un tableau à partir d'une chaîne de caractères avec la méthode split. Et vice versa.
[Rails] Je veux tout réinitialiser car les données de l'environnement local sont incorrectes! Que faire avant ça
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
Un script qui crée yaml à partir de CSV pour mettre les données initiales dans Rails with Fixtures
Je veux obtenir uniquement l'heure à partir des données de type Time ...! [Strftime] * Notes supplémentaires
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
J'ai essayé d'exprimer le numéro de téléphone (téléphone fixe / téléphone portable) avec une expression régulière dans Rails et d'écrire la validation et le test
Même si je souhaite convertir le contenu d'un objet de données en JSON en Java, il existe une référence circulaire ...
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.