[Ruby on Rails] Übergeben Sie die durch date_select geteilten Parameter an FormObject.

Wenn Sie mehrere Modelle durch Senden eines Formulars aktualisieren möchten, verwenden Sie wahrscheinlich FormObject. (Wenn Sie mehr über FormObject erfahren möchten, klicken Sie hier: [Rails] Bitte verwenden Sie FormObject)

Ich hatte Probleme, weil ich die durch date_select geteilten Parameter nicht so wie sie sind an dieses FormObject übergeben konnte. Als ich" include ActiveRecord :: AttributeAssignment` an FormObject deklarierte, konnte ich sie alle zusammen übergeben, daher möchte ich sie unten vorstellen Ich werde.

Erläuterung

Die Situation ist, wenn Sie Ihren Geburtstag auf dem neuen Registrierungsbildschirm registrieren.

Wenn Sie auf dem Bild auf die Schaltfläche "CreateUser" klicken, wird die Erstellungsaktion des Controllers ausgeführt. Geteilte Parameter unter Verwendung des StrongParameter-Mechanismus in der user_params-Methode <ActionController :: Parameters {" Geburtstag (1i) "=>" 2020 "," Geburtstag (2i) "=>" 7 "," Geburtstag (3i) "=>" 13 "} erlaubt: 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

Wie in @user = Form.new (user_params) angegeben, Wenn Sie versuchen, die geteilten Parameter durch den Anfangswert von FormObject zu übergeben, tritt ein Fehler auf, weil er geteilt ist. <ActionController :: Parameters {" Geburtstag (1i) "=>" 2020 "," Geburtstag (2i) "=>" 7 "," Geburtstag (3i) "=>" 12 "} erlaubt: true> Ich möchte es als Geburtstagsparameter übergeben. image.png

Wenn Sie "include ActiveRecord :: AttributeAssignment" deklarieren, werden die geteilten Parameter daher zusammen an das Attribut übergeben. Fall wird beigelegt.

app/forms/form.rb


class Form
  include ActiveModel::Model
  include ActiveModel::Attributes
  #hinzufügen
  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] Übergeben Sie die durch date_select geteilten Parameter an FormObject.
[Ruby on Rails] So ändern Sie den Spaltennamen
Übergeben Sie die Parameter an Rails link_to
Dinge, an die Sie sich erinnern sollten, und Konzepte im Ruby on Rails-Tutorial
(Ruby on Rails6) Erstellen Sie eine Funktion zum Bearbeiten des veröffentlichten Inhalts
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Vorbereiten der Einführung von jQuery in Ruby on Rails
[Ruby on Rails] Verwendung von redirect_to
[Ruby on Rails] Schaltfläche, um nach oben zurückzukehren
So lösen Sie die lokale Umgebungskonstruktion von Ruby on Rails (MAC)!
[Rails] So bestimmen Sie das Ziel anhand von "Rails-Routen"
Bereitstellung auf Ruby on Rails Elastic Beanstalk (EB-Bereitstellung)
Wenn das Ruby on Rails-Terminal zurückrollt
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
[Ruby on Rails] Ändern Sie das Aktualisierungsdatum und das Erstellungsdatum in Ihre bevorzugte Notation
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
[Ruby on Rails] So japanisieren Sie die Fehlermeldung des Formularobjekts (ActiveModel)
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
Zusammenfassung der Methoden zum Aktualisieren mehrerer Spalten [Ruby on Rails]
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
[Von Zeit zu Zeit aktualisiert] Ruby on Rails Praktische Methode
[Ruby on Rails] Ändern Sie die URL-ID in den Spaltennamen
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
[Ruby On Rails] So setzen Sie die Datenbank in Heroku zurück
Ruby on Rails Elementary
[Rails] So erhalten Sie den Inhalt starker Parameter
Ruby On Rails Association
[Ruby on Rails] Von der MySQL-Konstruktion zum Datenbankwechsel
(Ruby on Rails6) Reflektiert den veröffentlichten Inhalt aus dem Formular
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
[Ruby on Rails] Nur den Benutzer, der Beiträge verfasst hat, dürfen bearbeiten
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
<Punktinstallation> Einführung in Ruby on Rails5 Vergleich des Quellcodes
[Ruby on Rails] Eliminierung von Fat Controller-First, Logik zum Modell-
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Alle Inhalte der Listenseite löschen [Ruby on Rails]
[Ruby on Rails] Implementieren Sie die Anmeldefunktion von add_token_to_users mit API
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)