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 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.

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