[RUBY] [Rails] Comment enregistrer plusieurs enregistrements dans la table intermédiaire avec une association plusieurs-à-plusieurs

Fonctionnalités que vous souhaitez implémenter

Dans une relation de modèle plusieurs à plusieurs, je veux enregistrer plusieurs valeurs sélectionnées dans la table intermédiaire avec la case à cocher. J'étais vraiment intéressé quand je l'ai mis en œuvre, alors je vais le laisser comme un mémorandum.

environnement

Rails 5.2 Ruby 2.5.1 MacOSX

Relation de modèle

class Project < ApplicationRecord
  has_many :project_phases, dependent: :destroy
  has_many :mst_phases, through: :project_phases
end
class ProjectPhase < ApplicationRecord
  belongs_to :project
  belongs_to :mst_phase
end

--Maître de processus

class MstPhase < ApplicationRecord
  has_many :project_phases
end

Concernant le processus, seul le modèle project_phase est associé dans la table maître pour que le côté modèle du projet ne soit pas référencé.

View

<%= form_with model: @project, local: true do |f| %>
  <label>Nom du projet</label>
  <%= f.text_field :project_name %>

  <label>Processus de projet</label>
  <%= f.collection_check_boxes :mst_phase_ids, MstPhase.all, :id, :phase %>
<% end %>

Controller

class ProjectsController < ApplicationController

  def new
    @project = Project.new
    @project.project_phases.build
  end

  def create
    @project = Project.new(projects_params)
    
    if @project.save
      redirect_to project_path @project
    else
      render action: 'new'
    end
  end

  private
  def projects_params
    params.require(:project).permit( :project_name, mst_phase_ids: [])
  end
end

Le but est de définir StrongParameter pour recevoir les modèles liés à has_many en tant que tableau.

Les noms des paramètres doivent être décrits comme suit.

Nom du modèle_ids

Puisqu'il n'est pas nécessaire d'implémenter une logique spéciale pour les paramètres reçus dans le tableau, les enregistrements sont enregistrés dans la table pour le nombre d'éléments du tableau. Rails pratiques. .. .. .. ..

Recommended Posts

[Rails] Comment enregistrer plusieurs enregistrements dans la table intermédiaire avec une association plusieurs-à-plusieurs
Comment créer une combinaison unique de données dans la table intermédiaire des rails
[Rails] Comment obtenir les informations sur l'utilisateur actuellement connecté avec devise
[Rails] Comment appliquer le CSS utilisé dans l'application principale avec Administrer
Comment vérifier les commandes Rails dans le terminal
[Rails] Comment utiliser la méthode d'assistance utilisée dans l'application principale avec Administrer
Comment changer l'action avec plusieurs boutons d'envoi
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
[Rails] Comment changer le nom de colonne de la table
Organisé comment interagir avec le JDK par étapes
[Comment insérer une vidéo dans un hameau avec Rails]
Comment interroger Array dans jsonb avec Rails + postgres
[Rails] Comment afficher les images dans la vue
[Avec des astuces de retour] Comment présenter React aux rails les plus simples
[Rails] Comment afficher les informations stockées dans la base de données dans la vue
Comment utiliser la même classe Mapper dans plusieurs sources de données avec Spring Boot + MyBatis
Comment installer jQuery dans Rails 6
Comment installer Swiper in Rails
[Rails / Routing] Comment faire référence au contrôleur dans votre propre répertoire
[Rails] Comment introduire le kaminari avec Slim et changer le design
Comment obtenir la valeur de boolean avec jQuery sous forme simple de rails
Comment renommer un modèle avec des contraintes de clé externes dans Rails
Comment appeler plusieurs noms à la fois dans la même catégorie
Comment implémenter la fonctionnalité de recherche dans Rails
Comment changer le nom de l'application dans les rails
Comment décorer CSS sur les boutons radio de rails6 form_with (helper)
[Ruby on Rails] Comment se connecter avec seulement votre nom et mot de passe en utilisant le bijou
Comment mettre en œuvre un diaporama en utilisant Slick in Rails (un par un et plusieurs par un)
[Rails] Comment utiliser la méthode de la carte
[JPA] Comment enregistrer lorsque vous avez des éléments autres que des clés dans la table d'intersection liés à ManyToMany
Comment utiliser MySQL dans le didacticiel Rails
[Rails 6] Enregistrez-vous et connectez-vous avec l'authentification Devise + SNS (plusieurs liens sont autorisés)
[rails] Comment configurer le routage dans les ressources
Comment obtenir la date avec Java
Comment comparer uniquement le temps avec Rails (de quelle heure à quelle heure, quelque chose comme)
Comment implémenter la fonctionnalité de classement dans Rails
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment créer un environnement Rails 6 avec Docker
[Rails] Comment lire le fichier XML téléchargé depuis l'écran en type Hash
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
[Rails6] Comment connecter la fonction d'affichage générée par Scaffold avec la fonction utilisateur générée par devise
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"
Comment stocker simultanément des données dans un modèle associé à une forme imbriquée (Rails 6.0.0)
[Rails] Comment décider de la destination par "voies ferrées"
Comment vérifier le journal dans le conteneur Docker
Affectation à plusieurs variables avec l'opérateur ternaire