[RUBY] [Rails] Stocker uniquement les éléments cochés dans la base de données

Après avoir posé une question sur teratail, je l'ai résolue moi-même. Le site est si lourd (?) Je n'ai pas pu le publier, alors je vais d'abord l'écrire ici.

Ce que je voulais faire

Je faisais une application sur un film et j'avais besoin de stocker des informations simples sur le film dans une base de données. Comme il était ennuyeux d'entrer depuis le terminal, j'ai créé un formulaire de publication dans l'application dans le but de l'améliorer pour les utilisateurs plus tard sans le publier dans la version 1. Les informations de film suivantes peuvent être enregistrées dans la base de données avec la nouvelle méthode.

--title: Titre de l'œuvre --directed: nom du réalisateur --histoire: Synopsis --service: nom du service de livraison à partir duquel le synopsis est cité --time: temps de lecture

Je voulais sélectionner le nom du service de livraison parmi ceux-ci à partir des quatre cases à cocher et stocker le nom du service coché dans la base de données, mais l'article auquel je faisais référence était la case à cocher `. Puisque le contenu devait stocker l'élément et vérifier l'état dans un tableau, il était nécessaire «d'extraire uniquement la valeur vérifiée» afin de le réaliser.

Les cases à cocher sont placées à l'aide de la balise check_box.

<div class="box form4">
  <%= check_box "service", "PrimeVideo" %>PrimeVideo
  <%= check_box "service", "Netflix" %>Netflix
  <%= check_box "service", "Hulu" %>Hulu
  <%= check_box "service", "U-NEXT" %>U-NEXT
</div>

Directement dans le contrôleur

service: params[:service]

Si vous écrivez, le hachage généré sera stocké dans la colonne service de la base de données. Si elle n'est pas cochée, la valeur sera «0», et si c'est le cas, «1» sera la valeur.

{"PrimeVideo"=>"0", "Netflix"=>"1", "Hulu"=>"0", "U-NEXT"=>"0"}

De là, je veux extraire et enregistrer uniquement le nom de service de l'élément coché (c'est-à-dire la clé dont la valeur est «1»)! Peut-être parce que je n'avais pas assez de connaissances de base en premier lieu, je ne savais pas comment le faire et je l'ai laissé seul.

Solution###

def req
 params[:service].each do | di1 , di2 |
  if di2 == "1"
   @movie = Movie.new(
	  title: params[:title],
	  directed: params[:directed],
	  story: params[:story],
	  service:di1,
	  time: params[:time]
   )
   @movie.save
  end
 end
end

J'ai détourné le code de Article auquel je faisais initialement référence.

--Recevoir la valeur avec params [: service] et stocker le nom du service et vérifier l'état (0 ou 1) dans chacune des deux variables.

Suivez la procédure.

Si le nom du service n'est pas coché, la ** méthode save ne sera pas exécutée en premier lieu **, mais ... je n'ai pas le temps, alors maintenant je veux juste avancer ... Quand je serai calme, j'essaierai de jeter les bases autour des parties qui peuvent être transformées en un code un peu plus poli, comme la méthode select, la méthode keys et la syntaxe SQL.

Nous tenons à exprimer notre sincère gratitude à tous les répondants qui nous en ont donné l'occasion.

Recommended Posts

[Rails] Stocker uniquement les éléments cochés dans la base de données
rails test db seulement chute
Group_by dans Rails
[Localisation japonaise] Rails i18n Affichage de la vue de localisation japonaise simplifiée uniquement
rails db: 〇〇 Résumé
Fonction de notification simple dans Rails (uniquement lorsqu'elle est suivie)
[Ruby On Rails] Comment réinitialiser DB dans Heroku
twitter4j java Stocke les tweets recherchés dans DB (MySQL).
Association de modèles dans Rails
Ajout de colonnes dans les rails
Désactiver les turbolinks dans les rails
rails db: échec de la migration!
Résumé de la commande [Rails] rails db
Utiliser des images avec des rails
Comprendre la migration dans les rails
Diviser routes.rb dans Rails6
Markdown implémenté dans Rails
[Rails] Présentation de Travis CI et rester coincé dans db: create