[JAVA] Rails et données de forme

eyecatch.jpg Rails and FormData

Articles sur les rails et Form Data. J'écris en anglais et en japonais.

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

J'ai récemment remplacé Rails Form par un système basé sur l'API. Autrement dit, au lieu de Form, j'ai travaillé avec le backend avec une requête XHR (axios).

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

Cet article utilise un modèle utilisateur typique.

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

Problème / problème

Utilisation du formulaire Rails ・ Utilisation du formulaire Rails

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

Si vous utilisez Rails Form, vous trouverez les paramètres suivants dans le contrôleur.

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

Utilisation de FormData ・ Utilisation de FormData

Lorsque j'ai créé le corps de la requête, j'ai utilisé FormData.

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',
            },
          })
...
    

Le contrôleur de rails a la réponse suivante.

On the Rails backend we get:

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

Point clé:

As you can see:

Solution / Solution

La solution a été écrite à l'origine par @jugtuttle on Medium, mais avec le nom du modèle comme clé. S'il est inclus, c'est un succès.

@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',
            },
          })
...
    

Pour faciliter les choses:

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',
            },
          })
...
    

Résultat / Résultat

Le contrôleur Rails a les états suivants:

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

Rails et données de forme
Rails valides et invalides?
Poteaux Rails et liaison utilisateur
[Rails] nécessitent une méthode et une méthode d'autorisation
Registres du didacticiel Rails et mémorandum n ° 0
chemins de rails et méthodes d'URL
Les rails sont difficiles et douloureux!
Les rails sont difficiles et douloureux! Ⅱ
[Rails] strftime ceci et cela
Serveur Web et serveur d'applications Rails
[Rails] Enregistrer l'heure de début et l'heure de fin
Activer jQuery et Bootstrap dans Rails 6 (Rails 6)
[Rails] Différence entre find et find_by
[Rails] Paramètres de validation et localisation en japonais
Modèles de rails et conventions de dénomination des tables
Supprimez les "actifs" et les "turbolinks" dans "Rails6".
Fonction CRUD et MVC dans Rails
[Rails] Différences et utilisation de each_with_index et each.with_index
Mise à niveau de la version du projet Ruby and Rails
Considération sur les rails et l'architecture propre
[rails] Différence entre redirect_to et render
[Rails g. Erreur]
Notions de base sur les rails
Rails Examen 1
[Rails] first_or_initialize
Installez Webpacker et Yarn pour exécuter Rails
rails tutry
Construction de Rails 6 et environnement PostgreSQL avec Docker
== et égal
À propos des rails 6
Rails Ajout d'une fonction de connexion facile et facile
Fondation Rails
Mémorandum Rails
tutoriel sur les rails
rails tutry
tutoriel sur les rails
[Rails] [Note] Quand ajouter = à <%%> et quand pas
[erreur de rails] Erreur d'installation md5.bundle et mysql
[Rails] concevoir
Migration des rails Changements de colonne et ainsi de suite.
rails tutry
tutoriel sur les rails
Conseils de rails
méthode des rails
tutoriel sur les rails
Validation des rails et null: fausses notes personnelles
[Rails] Différence entre redirect_to et render [Débutant]
Rails Revue 2
[Rails / Active Record] À propos de la différence entre créer et créer!
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Nuxt / Rails] Implémentation POSTed en utilisant axios et devise_token_auth
Ceci et celui de la dérivation conditionnelle du développement des rails
Différence entre le membre et la collection de rails routes.rb