[RUBY] Über Rails Controller

Überblick

Ich möchte den ** Controller ** der Rails-Anwendung erläutern.

Dieses Ziel

** "Wissen über das MVC-Modell" ** ・ ** "Über die Rolle des Controllers" ** ・ ** "Praktische Verwendung" **

1. Was ist ein MVC-Modell?

Dies ist eine der Ideen für eine gute Verwaltung von Code beim Erstellen einer Anwendung. Es ist nur eine Denkweise, daher ist es nicht absolut richtig. Rails-Anwendungen enthalten dieses MVC-Framework.

3 Elemente von MVC

** "Model View Controller" **.   ・ Model ・ ・ ・ Verantwortlich für die Geschäftslogik im System

Ansicht ・ ・ ・ Verarbeitung wie Anzeige und Eingabe / Ausgabe

Controller Controller ・ ・ ・ Steuert Modell und Ansicht basierend auf Benutzereingaben

MVC-Verarbeitungsablauf in Rails

  1. ** "Controller" ** empfängt die Anfrage vom Client

  2. Bitten Sie für ** "Controller" ** ** "Model" **, die Daten zu verarbeiten.

  3. ** "Modell" ** verarbeitet Daten aus der Datenbank und gibt Daten an ** "Controller" ** zurück

  4. ** "Controller" ** fordert Sie auf, die in ** "View" ** empfangenen Daten zu verarbeiten

  5. ** "Ansicht" ** erstellt ein Formular (HTML-Dokument), das für den Client geeignet ist, und gibt es an ** "Controller" ** zurück

  6. ** "Controller" ** gibt den HTML-Text als Antwort an den Client zurück

Durch Wiederholen von 1 bis 6 wird es als Webanwendung eingerichtet.

2. Über die Rolle des Controllers

** Fazit **

Aktionsmethode

Diese Methode beschreibt den spezifischen Verarbeitungsinhalt der durch das Routing angegebenen Aktion.

Bild der Aktionsmethode


class SamplesController < ApplicationController
  def index
    #Spezifischer Verarbeitungsinhalt
    ......
    ......
  end
end

In diesem Beispiel ... Wenn die Indexaktion des Beispielcontrollers im Routing angegeben ist, beschreiben Sie die auszuführende Aktionsmethode in Form von "def index ... end".

Über die Zusammenarbeit mit Model

Zweck

Erstellen, Ändern oder Abrufen einer Datenbank über ein Modell.

Methode

Weisen Sie das Modell mit den Methoden der ActiveRecord-Klasse an, die das Modell erbt. Nachfolgend einige Beispiele für Methoden.

Methode Inhalt
all Holen Sie sich alle Daten in der Datenbank
find Holen Sie sich ein Datenelement in die Datenbank
new Generieren Sie die Erstellung neuer Daten
save Daten in Datenbank speichern

Bild der Methode


  (Modellklassenname).[Methode]
  Sample.all

Über die Zusammenarbeit mit View

Zweck

Übergeben der vom Modell empfangenen Daten an die Ansicht und Erstellen der Antwortdaten zur Rückgabe an den Client.

Methode

Weisen Sie den Daten aus dem Modell Instanzvariablen zu.

  @samples = Sample.all

Dadurch werden die Daten in der Ansichtsdatei verfügbar.

3. Praktische Anwendung

Position der Controller-Einstellung

Im Verzeichnis app / controller Legen Sie die Datei controller name_controller.rb fest.

Einschränkungen bei der Benennung von Controllern

Grundsätzlich sollte es ** "Plural" ** sein. Der Grund dafür ist, dass die von Rails verwendeten Dateien automatisch nach Namen erraten werden. Selbst wenn es in der Singularform vorliegen kann, muss der Entwickler den Code explizit schreiben, da dies sonst zu einem unerwarteten Fehler führt.

Name Beispiel Bemerkungen
Controller-Name samples
Name der Controller-Klasse SamplesController Kamelkoffer
Name der Controller-Datei samples_controller.rb Schlangenkoffer

Controller-Dateistruktur

Der Inhalt der Controller-Datei sieht folgendermaßen aus.

app/controllers/samples_controller.rb


  class SamplesController < ApplicationController
    def index
      #Spezifischer Verarbeitungsinhalt
      ......
      ......
    end
  end

Die erstellte Controller-Datei erbt ** "ApplicationController-Klasse" **.

Was ist die ApplicationController-Klasse?

app/controllers/application_controller.rb


  class ApplicationController < ActionController::Base
  end

Eine Klasse, die in der Datei app / controller / application_controller.rb definiert ist. Es ist eine (fast) leere Klasse, die nur von der ** ActionController :: Base-Klasse ** erbt.

Grundsätzlich erbt jeder Controller die ApplicationController-Klasse. Es wird verwendet, wenn Funktionen, die allen Anwendungen gemeinsam sind (Anmelden / Abmelden usw.), erforderlich sind.

Was ist die ActionController :: Base-Klasse?

Eine Klasse, die die Grundfunktionalität des Controllers bereitstellt. Es ist für den grundlegenden Teil der Anforderungs- / Antwortverarbeitung verantwortlich.

Behandlung von HTTP-Anforderungsparametern

Der Controller erhält die Parameter der HTTP-Anfrage vom Client über ** "params method" **.

params Methode

Rails verarbeitet implizit ** Anforderungsparameter ** und speichert die Daten in Parametern im Hash-Format. Es gibt keinen Unterschied, wie Daten empfangen werden, selbst wenn auf ** GET-Anforderung / POST-Anforderung ** zugegriffen wird.

Zugriff per GET-Anfrage

Greifen Sie auf den Webserver zu, indem Sie den Parameter in ** "Anforderungs-URI" ** der Anforderungszeile der HTTP-Anforderung einfügen. Sie können Parameter im ** "URL-Format" ** und ** "Abfrageformat" ** übergeben.

URL-Format

Wenn die folgenden Routing-Einstellungen vorgenommen werden

  Prefix Verb   URI Pattern               Controller#Action
  user   GET    /users/:id(.:format)      users#show

Wenn Sie mit der URL "http: // sample.com / users / 7" zugreifen Der Parameter : id der Anfrage bedeutet 7 In Rails wird es in params gespeichert und der Wert von "params [: id]" ist "7".

app/controllers/users_controller.rb


  class UsersController < ApplicationController
    def show
      params[:id] # "7"
    end
  end

Abfrageformat

Schreiben Sie am Ende der URL "?", Gefolgt von "Parametername = Wert". Wenn mehrere Parameter vorhanden sind, verbinden Sie sie mit "&", um sie zu beschreiben.   Verwenden Sie das gleiche Routing wie im obigen Beispiel Wenn Sie mit der URL "http: //sample.com/users/7? Keyword = query & num = 10" zugreifen Der Wert von "params [: keyword]" ist "query" und "params [: num]" ist "10".

app/controllers/users_controller.rb


  class UsersController < ApplicationController
    def show
      params[:keyword] # "query"
      params[:num] # "10"
    end
  end

Zugriff per POST-Anfrage

Dies ist eine Anforderung, die auftritt, wenn der Client bei der Eingabe aus dem Formular auf die Schaltfläche "Senden" drückt. Greifen Sie auf den Webserver zu, indem Sie die Parameter in den ** "body" ** der HTTP-Anforderung aufnehmen.

Sie können auch mehr Parameter als eine GET-Anforderung senden.

Vorsichtsmaßnahmen beim Speichern von Parametern

Verwenden Sie beim Speichern von "params" in der Datenbank einen Mechanismus namens ** "Strong Parameters" **.

Was sind starke Parameter?

Es ist ein Mechanismus, um die Sicherheitsanfälligkeit von "Mass Assignment" zu beseitigen, die bis zur Rails3-Serie verwendet wurde. In "Massenzuweisung" wurden die Informationen zu Parametern im Zusammenhang mit dem Speichern in ** Modell ** beschrieben. Beschreiben Sie unter "Starke Parameter" die Informationen der Parameter, die in ** Controller ** gespeichert werden sollen.

Strong_Bild der Parameter


  class UsersController < ApplicationController
    def create
      @user = User.new(user_params) # user_Erstellen Sie neue Daten mit der params-Methode
      @user.save #Über Modell in der Datenbank speichern
    end

    #Starke Parameter werden nicht von außerhalb der Klasse aufgerufen. Schreiben Sie sie daher in einer privaten Methode.
    private
    def user_params
      params.require(:user).permit(:name, :age)
    end
  end

In diesem Beispiel In der Methode "user_params" werden die zu speichernden Parameter in ": name" und ": age" von ": user" angegeben.

erfordern Methode

Geben Sie den Namen der Tabelle an, die in der Datenbank gespeichert werden soll.

Genehmigungsmethode

Gibt den Spaltennamen an, der in der Datenbanktabelle gespeichert werden soll.


Das ist alles für die Erklärung des Controllers. Vielen Dank.

Recommended Posts

Über Rails Controller
Über Schienen 6
Informationen zum Rails-Routing
[Rails] Über ActiveJob!
[Rails] Informationen zu Migrationsdateien
[Schienen 6] Über die wichtigsten Edelsteine
[Rails] Über aktiven Hash
Informationen zur Versionsspezifikation für Schienen
Schienen Starke Parameter
[Anfänger] Über Rails Session
[Rails] Holen Sie sich UserAgent auf den Controller
Informationen zum Benennen von Rails-Modellmethoden
[Rails] Informationen zur Struktur des scss-Ordners
Über =
[Rails] Informationen zum Rspec-Antworttest
Beziehung zwischen Rails Routing Controller-Ansicht
Über Rails Scraping-Methode Mechanisieren
Über das Symbol <%%> in Rails erb
[Rails] Über die Hilfsmethode form_with [Basic]
Überlegungen zu Schienen und sauberer Architektur
Über method.invoke
[Schienen g. Fehler]
Über Kotlin
Über attr_accessor
Rails Grundlagen
Rails Review 1
Rails API
Schienenmigration
Über die Vererbung
Über Docker
Schienen Tutry
Modell [Ruby on Rails], Befehl für Controller-Terminal
Über den Frühling ③
Über Aufzählung
[Rails] Liste der in Controller definierten Aktionen
[Rails 6.0] Informationen zum Batch-Speichern mehrerer Datensätze
Schienenfundament
Über Polymorphismus
Über Optional
Rails Memorandum
Über Hash
Über JitPack
[Schienen] Verwenden Sie die Validierung für einen bestimmten Controller
Schienen Tutorial
Schienen Tutry
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
[Ruby on Rails] Controller-Test mit RSpec
Darüber ()