[RUBY] [Rails] Je souhaite envoyer des données de différents modèles dans un formulaire

Je souhaite associer des modèles avec une relation 1: 1 afin que chaque donnée de modèle puisse être envoyée au formulaire en même temps. En d'autres termes, le but de cette fois est de pouvoir gérer deux modèles de données dans la méthode de formulaire.

Cette fois, le modèle User et le modèle User_profile ont une relation 1: 1 afin que les deux informations utilisateur puissent être modifiées en même temps dans la méthode de formulaire.

M

Fichier de migration


class CreateUserProfiles < ActiveRecord::Migration[6.0]
  def change
    create_table :user_profile do |t|
      t.string :twitter_url
      t.string :program_lang
      t.string :image
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

t.references :user, foreign_key: true En définissant une clé externe, le modèle User et le modèle User_profile sont liés.


$ rails db:migrate

models/user_profile.rb


class Prof < ApplicationRecord
  belongs_to :user
end

models/user.rb


class User < ApplicationRecord
  has_one :user_profile
  accepts_nested_attributes_for :user_profile
end

ʻAccepts_nested_attributes_for: user_profileest pour les données de formulaire imbriquées. Plus précisément, il peut se résumer sous la forme de{user: {user_profile_attributes: {program_lang: 〇〇, twitter_url: 〇〇, image: 〇〇}}}` lors de paramètres forts.

C

users_controller.rb


def create
  @user = User.new(user_params)
  @user.build_user_profile
  if @user.save
・ ・ ・
  end
end

private

def user_params
  params.require(:user).permit(:name, :email, :password, user_profile_attributes: [:id, :program_lang, :twitter_url, :image])
end

Ce à quoi vous devez faire attention ici est @ user.build_user_profile. Si vous n'avez pas créé d'instance du modèle user_profile à l'avance, le formulaire du côté Affichage ne sera pas affiché.

V

ruby:edit.html.erb


.container
  = form_with model: @user, local: true do |form|
    = form.fields_for :user_profile do |prof|
      .form-image
        = prof.file_field :image

    .form-group
      = form.text_field :name
      = form.text_field :email

    = form.fields_for :user_profile do |prof|
      .form-group
        = prof.text_field :program_lang
        = prof.text_field :twitter_url

    .row
      = form.submit "Éditer"

C'est fields_for qui reconnaît encore un autre modèle de données dans le formulaire. En créant un formulaire à l'intérieur du formulaire, vous pouvez envoyer les données côté serveur dans un lot en appuyant simplement sur le bouton «Modifier».

Recommended Posts

[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Je veux utiliser une petite icône dans Rails
Je souhaite définir une fonction dans la console Rails
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
Je souhaite envoyer un e-mail en Java.
[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.
Comment stocker simultanément des données dans un modèle associé à une forme imbriquée (Rails 6.0.0)
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Je veux appeler une méthode d'une autre classe
Je veux cliquer sur une broche GoogleMap dans RSpec
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.
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux créer un fichier Parquet même en Ruby
J'ai créé un client RESAS-API en Java
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 ...
Implémenter un formulaire de contact dans Rails
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
Je souhaite ajouter une fonction de navigation avec ruby on rails
Tri des données Décroissant, croissant / Rails
Comment supprimer de grandes quantités de données dans Rails et problèmes
Je veux ajouter un appareil dans Rails, mais je ne peux pas grouper l'installation
[Rails] Je souhaite ajouter des données aux paramètres lors de la transition avec link_to
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Comment insérer une vidéo dans Rails
Je veux écrire un test unitaire!
Je veux utiliser @Autowired dans Servlet
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
Les paramètres que j'ai reçus dans Rails étaient un peu différents de ce à quoi je m'attendais
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
[Ruby] Je souhaite afficher les éléments publiés par ordre de date la plus récente
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je veux ForEach un tableau avec une expression Lambda en Java
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
[Order method] Définit l'ordre des données dans Rails
Convertir en balise dans la chaîne d'URL avec Rails
J'ai essayé d'organiser la session en Rails
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
[Ruby] Je veux faire un saut de méthode!
Je veux var_dump le contenu de l'intention
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions