[Ruby on Rails] Eliminierung von Fat Controller-First, Logik zum Modell-

Einführung

Dies ist der erste Beitrag. Ich habe Ruby on Rails in der Schule gelernt und hatte einen Refactoring-Lehrplan, aber zu diesem Zeitpunkt wollte ich ihn unbedingt abschließen, und ich hatte ihn nicht refactored. Deshalb habe ich diesmal die Controller-Logik auf Model verschoben und den Controller sauberer gemacht. Ich werde die Methode schreiben.

Was ist Fat Controller überhaupt?

Es bezieht sich auf den Zustand der Steuerung, in dem die Anzahl der Zeilen der Steuerung selbst groß ist und es schwierig ist, dem Verarbeitungsablauf zu folgen (einfach gesagt, die Sichtbarkeit ist schlecht). In der Schule habe ich die gesamte Logik in den Controller geschrieben, ohne es überhaupt zu merken, aber ich kämpfe immer noch mit der persönlichen Anwendung Fat Controller, weil ich dem Code auf praktischer Ebene näher kommen möchte (lacht)

Schnitzverfahren

Lassen Sie uns zunächst die enorm geschwollene Controller-Logik auf Model übertragen. Für öffentliche Methoden, die in Controller beschrieben sind, sind Aktionen ausreichend.

Und ich denke, dass es im Grunde kein Problem mit Model als Ziel gibt, um die Logik zu verschieben.

Beispiel: Wenn Sie nur die Elemente abrufen möchten, über die der Benutzer verfügt

Vor dem Schnitzen ↓

ruby:users.controller.rb


def show
  @useritems = Item.includes(:images).where(user_id:(current_user.id)).order(id: "DESC") if user_signed_in?
end

Da die Authentifizierungsfunktion mit devise implementiert wird, kann die ID des aktuell angemeldeten Benutzers mit "current_user.id" abgerufen werden. Mit anderen Worten, ich möchte die Informationen des Benutzers auf die Seite "Meine Seite" (Aktion anzeigen) des aktuell angemeldeten Benutzers ziehen. Diese Datenerfassung wird jedoch tatsächlich auch in der Indexaktion von "items.controller.rb" verwendet. Daher möchte ich eine Methode in Model definieren und die Beschreibung zusammenfassen, um das Element des Benutzers zu erhalten.

Zunächst einmal Controller

ruby:users.controller.rb


def show
  @useritems = Item.user_items_get(current_user.id) if user_signed_in?
end

Da "current_user" auf der Modellseite nicht verwendet werden kann, übergeben Sie es als Argument.

Dann Modell

Item.rb


def self.user_items_get(user_bigint)
  Item.includes(:images).where(user_id:(user_bigint)).order(id: "DESC")
end

Auf diese Weise wird sogar die Indexaktion von ItemController ausgeführt

ruby:items.cotroller.rb


def index
  @useritems = Item.user_items_get(current_user.id).limit(10) if user_signed_in?
end

Es kann so verwendet werden.

Wenn Sie eine Methode in Model schreiben und mit Controller aufrufen möchten, sind Anfänger der Meinung, dass dies eine große Sache ist. Es ist jedoch wichtig, Controller sauber zu machen. Verwenden Sie sie daher bitte. (Die Anzahl der Zeilen in diesem Beispiel hat sich nicht verringert ... lol)

Recommended Posts

[Ruby on Rails] Eliminierung von Fat Controller-First, Logik zum Modell-
Grundkenntnisse in Ruby on Rails
Verwendung von Ruby on Rails
[Ruby on Rails] Einführung der Anfangsdaten
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby on Rails] 1 Modell CRUD (Routing Main)
Modell [Ruby on Rails], Befehl für Controller-Terminal
Befehl zum Erstellen / Löschen von Ruby on Rails-Modellen
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Vorbereiten der Einführung von jQuery in Ruby on Rails
[Ruby on Rails] Japanische Fehlernotation
[Ruby on Rails] Verwendung von redirect_to
[Ruby on Rails] Modelltest mit RSpec
Erklärung von Ruby auf Schienen für Anfänger ①
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Ruby on Rails] Schaltfläche, um nach oben zurückzukehren
So lösen Sie die lokale Umgebungskonstruktion von Ruby on Rails (MAC)!
So debuggen Sie die Verarbeitung im Ruby on Rails-Modell nur mit der Konsole
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Ruby on Rails] Bis zur Einführung von RSpec
Empfehlung der Serviceklasse in Ruby on Rails
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Ruby on Rails] Ein Memorandum mit Layoutvorlagen
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
[Ruby on Rails] So japanisieren Sie die Fehlermeldung des Formularobjekts (ActiveModel)
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
Zusammenfassung der Methoden zum Aktualisieren mehrerer Spalten [Ruby on Rails]
[Ruby on Rails] So ändern Sie den Spaltennamen
[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
Erklärung von Ruby auf Schienen für Anfänger ⑥ ~ Erstellung der Validierung ~
[Ruby on Rails] Von der MySQL-Konstruktion zum Datenbankwechsel
Erklärung von Ruby on Rails für Anfänger ② ~ Links erstellen ~
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
[Ruby on Rails] Suchfunktion (Modell, Methodenauswahlformel)
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
Erklärung von Ruby on Rails für Anfänger ④ ~ Informationen zu Benennungsregeln und zur Verwendung von form_Tag ~