[RUBY] [Schienen] Verwenden Sie die Validierung für einen bestimmten Controller

Einführung

Ich werde darüber schreiben, was zu tun ist, wenn eine bestimmte Validierung nur auf einem bestimmten Controller funktionieren soll.

Konkretes Beispiel

Überlegen Sie beispielsweise beim Registrieren von Benutzerinformationen, wann Sie Informationen Schritt für Schritt registrieren möchten.

Benutzertabelle

column type
name string
email string
password string
address string
image string

Seite 1: Name, E-Mail, Passwort 2. Seite: Adresse, Bild

Überlegen Sie, wie Sie den Namen, die E-Mail-Adresse und das Kennwort speichern und anschließend die Adresse und das Bild speichern.

Wenn Sie möchten, dass alle Spalten erforderlich sind, führt das Schreiben von "Präsenz: Wahr" in das Modell zu einem Fehler bei der Registrierung der ersten Seite. (Weil die Adresse und das Bild leer sind)

Was soll ich tun, wenn ich auf der ersten und zweiten Seite unterschiedliche Validierungen verwenden möchte?

Weise

Sie können "with_options" für jede Aktion verwenden. Das Bild ist, dass Sie die Validierungsgruppe im Modell als "with_options on: ~ do" benennen und die Validierung mit der Methode "valid? (Name)" auf dem Controller überprüfen.

Die spezifische Schreibmethode ist wie folgt. (Bitte beachten Sie, dass einige Teile mit einer leichten Unterbrechung geschrieben sind.)

Modell-


with_options on: :step1 do
  validates :name, presence: true
  validates :email, uniqueness: true
  validates :password, presence: true, length: { minimum: 8 }
  validates :password, confirmation: true
end

with_options on: :step2 do
  validates :address, presence: true
  validates :image, uniqueness: true
end

step1 controller


def create
  @user = User.new(user_params)
  if @user.valid?(:step1) && @user.save
    return redirect_to step2_path
  end

  render :new
end

step2 controller


def update
  @user = User.find(params[:id])
  if @user.valid?(:step2) && @user.update(user_params)
    return redirect_to user_path
  end

  render :edit
end

Ergänzung

Wenn Sie alle Validierungen gleichzeitig anwenden möchten, müssen Sie als "gültig? (: Schritt 1) && gültig? (: Schritt 2)" schreiben, was ein wenig mühsam ist ... (Ich dachte, dass alle with_options nur von valid? Verwendet würden, aber es hat nicht funktioniert)

Übrigens, wenn Sie create und update richtig verwenden möchten, lesen Sie bitte den Artikel hier. (Obwohl es einen Teil gibt, der sich mit diesem Beitrag überschneidet ...)

Recommended Posts

[Schienen] Verwenden Sie die Validierung für einen bestimmten Controller
Poste Videos auf Schienen
[Rails] Verwendung der Validierung
Zusammenfassung der Ruby on Rails-Validierung
Wenden Sie CSS auf eine bestimmte Ansicht in Ruby on Rails an
Verwendung von Ruby on Rails
Ein Memorandum zur Verwendung von Eclipse
Modell [Ruby on Rails], Befehl für Controller-Terminal
Versuchen Sie, die Rails-App für EC2-Teil 1 bereitzustellen.
[Ruby on Rails] Controller-Test mit RSpec
Befehl zum Erstellen / Löschen des Ruby on Rails-Controllers
[Ruby on Rails] Verwendung von redirect_to
Wenn Rails eine Sitzung für einen bestimmten Controller deaktivieren soll
Validierungseinstellungen für die Ruby on Rails-Anmeldefunktion
Tag-Funktion zu Rails hinzufügen. Verwenden Sie Acts-as-Taggable-On
Verwenden Sie ControlsFX / Validation
Rückenwind auf Schienen
[Schienen] Validierung einstellen
Einführung in Rspec, ein Testframework für Ruby on Rails
[Ruby on Rails] Ein Memorandum mit Layoutvorlagen
(Ruby on Rails6) Erstellen von Daten in einer Tabelle
[Für Anfänger] Verfahren zum Erstellen eines Controllers mithilfe von Schienen
[Rails5] Rspec -validierung-
Über Rails Controller
[Rails] Verwenden Sie jQuery
Ich habe mit Ruby On Rails ein Portfolio erstellt
Eine Geschichte, in der Front-Frameworks für vorhandene Rails-Anwendungen verglichen werden
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
Verwenden Sie Vue.js mit CDN (nur kopieren und einfügen!)
Ich möchte ein kleines Symbol in Rails verwenden
So funktioniert JavaScript auf einer bestimmten Seite
Verwenden Sie java1.7 (zulu7) in einem bestimmten Verzeichnis mit jenv
Erklärung von Ruby auf Schienen für Anfänger ⑥ ~ Erstellung der Validierung ~
Eine hohe Rechnung von AWS während der Entwicklung auf Schienen ...
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Starten Sie EC2 Rails
Verwenden Sie perltidy unter CentOS 8
[Rails] Passen Sie die Validierung des Geräts an
Verwenden Sie mod_auth_cas unter CentOS 8
Stellen Sie RAILS auf EC2 bereit
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Verwenden Sie Bilder mit Schienen
Ja, ich bin auf Schienen!
Verwenden Sie Corretto 11 mit Heroku
Verwenden Sie cpplapack mit Ubuntu
Ruby On Rails Association
Schwierigkeiten beim Erstellen einer Ruby on Rails-Umgebung (Windows 10) (SQLite3)
[Ruby on Rails] Fügen Sie eine Spalte mit externen Schlüsselbeschränkungen hinzu
Ein Hinweis zum Seed-Feature von Ruby on Rails