[RUBY] [Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden

Ich möchte Modelle einer 1: 1-Beziehung zuordnen, damit alle Modelldaten gleichzeitig an das Formular gesendet werden können. Mit anderen Worten, der Zweck dieser Zeit besteht darin, zwei Datenmodelle innerhalb der Formularmethode verarbeiten zu können.

Dieses Mal machen wir das Benutzermodell und das User_profile-Modell zu einer 1: 1-Beziehung, sodass beide Benutzerinformationen gleichzeitig in der Formularmethode bearbeitet werden können.

M

Migrationsdatei


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 Durch Festlegen eines externen Schlüssels werden das Benutzermodell und das Benutzerprofilmodell verknüpft.


$ 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

accept_nested_attributes_for: user_profile ist bei verschachtelten Formulardaten. Insbesondere kann es zum Zeitpunkt starker Parameter in Form von "{user: {user_profile_attributes: {program_lang: 〇〇, twitter_url: 〇〇, image: 〇〇}}}" zusammengefasst werden.

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

Was Sie hier beachten sollten, ist "@ user.build_user_profile". Wenn Sie im Voraus keine Instanz des Modells user_profile erstellt haben, wird das Formular auf der Ansichtsseite nicht angezeigt.

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 "Bearbeiten"

Es ist fields_for, das noch weitere Modelldaten im Formular erkennt. Durch Erstellen eines Formulars innerhalb des Formulars können Sie die Daten stapelweise an die Serverseite senden, indem Sie einfach auf die Schaltfläche "Bearbeiten" klicken.

Recommended Posts

[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Ich möchte eine E-Mail in Java senden.
[Für Anfänger] Ich möchte mit einem Auswahlbefehl automatisch vorregistrierte Daten in das Eingabeformular eingeben.
So speichern Sie gleichzeitig Daten in einem Modell, das einem verschachtelten Formular zugeordnet ist (Rails 6.0.0)
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
So erstellen Sie eine eindeutige Datenkombination in der Schienen-Zwischentabelle
Ich möchte eine Methode einer anderen Klasse aufrufen
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte die Pulldown-Menüelemente beim Senden eines Formulars in Rails in CSV importieren und aus den DB-Daten anzeigen.
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich habe einen RESAS-API-Client in Java erstellt
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
Implementieren Sie ein Kontaktformular in Rails
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Daten sortieren Absteigend, aufsteigend / Schienen
So löschen Sie große Datenmengen in Rails und Bedenken
Ich möchte Geräte in Rails hinzufügen, kann die Installation jedoch nicht bündeln
[Rails] Ich möchte beim Übergang mit link_to Daten zu Params hinzufügen
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Ich möchte eine Webanwendung entwickeln!
Ich möchte ein schönes build.gradle schreiben
So fügen Sie ein Video in Rails ein
Ich möchte einen Unit Test schreiben!
Ich möchte @Autowired in Servlet verwenden
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Die Parameter, die ich in Rails erhalten habe, waren etwas anders als ich erwartet hatte
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
[Ruby] Ich möchte veröffentlichte Artikel in der Reihenfolge des neuesten Datums anzeigen
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
"Lehrer, ich möchte im Frühjahr eine Anmeldefunktion implementieren" ① Hallo Welt
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Mit Rails in eine Tag-zu-URL-Zeichenfolge konvertieren
Ich habe versucht, die Sitzung in Rails zu organisieren
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte den Inhalt der Absicht var_dump
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
Ich möchte APP_HOME an Logback in Gradle übergeben
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen