[Ruby on Rails] Passez les paramètres divisés par date_select à FormObject.

Si vous souhaitez mettre à jour plusieurs modèles en soumettant un formulaire, vous utiliserez probablement FormObject. (Si vous voulez en savoir plus sur FormObject, cliquez ici: [Rails] Veuillez utiliser FormObject)

J'avais des problèmes parce que je ne pouvais pas transmettre les paramètres divisés par date_select à ce FormObject tel quel. Après avoir déclaré ʻinclude ActiveRecord :: AttributeAssignment` à FormObject, j'ai pu les transmettre tous ensemble, je voudrais donc les présenter ci-dessous. Je vais.

La description

La situation est lorsque vous enregistrez votre anniversaire sur le nouvel écran d'inscription.

Lorsque vous appuyez sur le bouton CreateUser sur l'image, l'action de création du contrôleur s'exécute. Paramètres divisés en utilisant le mécanisme StrongParameter dans la méthode user_params <ActionController :: Parameters {" birthday (1i) "=>" 2020 "," birthday (2i) "=>" 7 "," birthday (3i) "=>" 13 "} autorisé: Get true>.

app/controllers/users_controller.rb


class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = Form.new
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = Form.new(user_params)
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1
  # PATCH/PUT /users/1.json
  def update
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { render :show, status: :ok, location: @user }
      else
        format.html { render :edit }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def user_params
      params.require(:user).permit(:birthday)
    end
end

app/forms/form.rb


class Form
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :birthday, :date

  def to_model
    User.new(birthday: birthday)
  end

  def save
    return false if invalid?
    to_model.save
  end
end

Comme indiqué dans @user = Form.new (user_params), Si vous essayez de transmettre les paramètres divisés par la valeur initiale de FormObject, une erreur se produit car il est divisé. <ActionController :: Parameters {" birthday (1i) "=>" 2020 "," birthday (2i) "=>" 7 "," birthday (3i) "=>" 12 "} autorisé: true> Je veux le passer comme paramètre d'anniversaire. image.png

Par conséquent, si vous déclarez ʻinclude ActiveRecord :: AttributeAssignment`, les paramètres divisés seront passés à l'attribut ensemble. affaire en cours de règlement.

app/forms/form.rb


class Form
  include ActiveModel::Model
  include ActiveModel::Attributes
  #ajouter à
  include ActiveRecord::AttributeAssignment

  attribute :birthday, :date

  def to_model
    User.new(birthday: birthday)
  end

  def save
    return false if invalid?
    to_model.save
  end
end

Recommended Posts

[Ruby on Rails] Passez les paramètres divisés par date_select à FormObject.
[Ruby on Rails] Comment changer le nom de la colonne
Passer des paramètres à Rails link_to
Points à retenir et concepts dans le didacticiel Ruby on Rails
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié
Déployer sur Heroku [Ruby on Rails] Débutant
Préparation à l'introduction de jQuery dans Ruby on Rails
[Ruby on Rails] Comment utiliser redirect_to
Bouton [Ruby on Rails] pour revenir en haut
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
[Rails] Comment décider de la destination par "voies ferrées"
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Quand le terminal Ruby on Rails revient en arrière
Déterminez la page actuelle avec Ruby on Rails
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
[Ruby on Rails] Modifiez la date de mise à jour et la date de création selon votre notation préférée
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"
[Ruby on Rails] Comment japonaisiser le message d'erreur de l'objet Form (ActiveModel)
[Introduction] Créer une application Ruby on Rails
Résumé des méthodes de mise à jour de plusieurs colonnes [Ruby on Rails]
[Ruby on Rails] Comment écrire enum en japonais
[Mis à jour de temps en temps] Ruby on Rails Méthode pratique
[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
[Ruby On Rails] Comment réinitialiser DB dans Heroku
Ruby on Rails élémentaire
[Rails] Comment obtenir le contenu des paramètres forts
Association Ruby On Rails
[Ruby on Rails] De la construction de MySQL au changement de base de données
(Ruby on Rails6) Refléter le contenu publié à partir du formulaire
(Ruby on Rails6) Comment créer un modèle et une table
Essayez d'utiliser l'attribut de requête Ruby on Rails
[Ruby on Rails] Seul l'utilisateur qui a publié peut modifier
[Ruby on Rails] Afficher rapidement le titre de la page dans le navigateur
<Installation de points> Introduction à Ruby on Rails5 Comparaison du code source
[Ruby on Rails] Élimination de Fat Controller-First, logic to model-
(Ruby on Rails6) Affichage de la base de données qui a obtenu l'identifiant de la base de données
Supprimer tout le contenu de la page de liste [Ruby on Rails]
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)