[JAVA] Schienen und Formulardaten

eyecatch.jpg Rails and FormData

Artikel über Schienen und Formulardaten. Ich schreibe sowohl auf Englisch als auch auf Japanisch.

This post talks about using WebAPI's FormData with Rails.

Ich habe kürzlich Rails Form durch ein API-basiertes System ersetzt. Das heißt, anstelle von Form habe ich mit dem Backend mit einer XHR-Anfrage (axios) gearbeitet.

We recently migrated from using Rails formstoanAPIbasedappwheredataissenttothebackendusingXHRrequests(inourcase,usingaxios).

Dieser Artikel verwendet ein typisches Benutzermodell.

For the following example I will be using a generic User model.

Problem / Problem

Verwenden des Schienenformulars ・ Verwenden des Schienenformulars

<%= form_for @user, url: {action: "create"} do |f| %>
  <%= f.text_field :name %> # "Yokoyama"
  <%= f.text_field :role %> # "Developer"
  <%= f.submit "Create" %>
<% end %>

Wenn Sie Rails Form verwenden, finden Sie die folgenden Parameter im Controller.

If we were using Rails forms then we'd normally get:

def create
 # params = <ActionController::Parameters
 # {
 #  "user" => {
 #    "name"=>"Yokoyama",
 #	  "role"=>"Developer"
 #  },
 #	"controller"=>"...",
 #	"action"=>"create",
 # }
 # permitted: false>
  ...
end

Verwenden von FormData ・ Verwenden von FormData

Als ich den Anfragetext erstellt habe, habe ich FormData verwendet.

When packaging a body for a POST/PATCH request we used FormData.


const formData = new FormData();

formData.append('name','Yokoyama');
formData.append('role','Developer');

const url = 'user create link';
axios.post(url, formData, {
            headers: {
              'content-type': 'multipart/form-data',
            },
          })
...
    

Der Rails Controller hat die folgende Antwort.

On the Rails backend we get:

def create
 # params = <ActionController::Parameters
 # {
 #  "name"=>"Yokoyama",
 #	"role"=>"Developer",
 #	"controller"=>"...",
 #	"action"=>"create",
 # }
 # permitted: false>
  ...
end

Kernpunkt:

As you can see:

Lösung / Lösung

Die Lösung wurde ursprünglich von @jugtuttle on Medium geschrieben, jedoch mit dem Modellnamen als Schlüssel. Wenn es enthalten ist, ist es ein Erfolg.

@jugtuttle on Medium pointed out that you can simply use a key that has the model name. So in our case:

const formData = new FormData();

formData.append('user[name]','Yokoyama');
formData.append('user[role]','Developer');

axios.post('insert user path here', formData, {
            headers: {
              'content-type': 'multipart/form-data',
            },
          })
...
    

Zu erleichtern:

To make it even easier:


// rails_form_data.js

class RailsFormData extends FormData {
  constructor(model) {
    super();
    this.model = model;
  }

  append(key, value) {
    super.append(`${this.model}[${key}]`, value);
  }
}

export default RailsFormData;
import RailsFormData from '...'

const formData = new RailsFormData('user');

formData.append('name','Yokoyama');
formData.append('role','Developer');

axios.post('insert user path here', formData, {
            headers: {
              'content-type': 'multipart/form-data',
            },
          })
...
    

Ergebnis / Ergebnis

Der Rails-Controller hat die folgenden Zustände:

Then on the Rails backend side you'll get:

def create
  #  params = <ActionController::Parameters
  #  {
  #    "user" => {
  #      "name"=>"Yokoyama",
  #	     "role"=>"Developer"
  #    },
  #	   "controller"=>"...",
  #	   "action"=>"create",
  # }
  # permitted: false>
  ...
end

Recommended Posts

Schienen und Formulardaten
Schienen gültig und ungültig?
Rails Posts und User Linkage
[Schienen] erfordern Methode und Genehmigungsmethode
Rails Tutorial Records und Memorandum # 0
Schienenpfad und URL-Methoden
Schienen sind schwierig und schmerzhaft!
Schienen sind schwierig und schmerzhaft! Ⅱ
[Rails] strftime dies und das
Rails-Webserver und Anwendungsserver
[Schienen] Startzeit und Endzeit speichern
Aktivieren Sie jQuery und Bootstrap in Rails 6 (Rails 6).
[Rails] Unterschied zwischen find und find_by
[Rails] Validierungseinstellungen und japanische Lokalisierung
Namenskonventionen für Schienenmodelle und Tabellen
Entfernen Sie "Assets" und "Turbolinks" in "Rails6".
CRUD-Funktion und MVC in Rails
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index
Upgrade der Ruby- und Rails-Version des Projekts
Überlegungen zu Schienen und sauberer Architektur
[Rails] Unterschied zwischen redirect_to und Rendern
[Schienen g. Fehler]
Rails Grundlagen
Rails Review 1
[Rails] first_or_initialize
Installieren Sie Webpacker und Yarn, um Rails auszuführen
Schienen Tutry
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
== und gleich
Über Schienen 6
Schienen Hinzufügen einer einfachen Anmeldefunktion
Schienenfundament
Rails Memorandum
Schienen Tutorial
Schienen Tutry
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
[Rails s Fehler] md5.bundle und MySQL Installationsfehler
[Schienen] erfinden
Schienenmigration Spaltenänderungen usw.
Schienen Tutry
Schienen Tutorial
Schienen Tipps
Schienenmethode
Schienen Tutorial
Rails-Validierung und null: false Persönliche Notizen
[Rails] Unterschied zwischen redirect_to und render [Anfänger]
Rails Review 2
[Rails / Active Record] Über den Unterschied zwischen create und create!
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Nuxt / Rails] POST-Implementierung mit axios und devise_token_auth
Dies und das der bedingten Verzweigung der Schienenentwicklung
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb