[RUBY] Die Geschichte des Refactorings mit einem selbstgemachten Helfer zum ersten Mal in einer Rails-App

Einführung

Ich habe Anwendungen mit Ruby on Rails geschrieben Ich war neugierig darauf.

Dieser Typ, der jedes Mal mitkommt, wenn Sie einen Controller erstellen 〇〇_helper.rb Wofür wird diese Datei verwendet ... Da es Helfer sagt, hängt es mit Hilfsmethoden zusammen ... ??

Zu dieser Zeit habe ich "Es muss eine bequeme Datei sein, da sie gleichzeitig erstellt wird." Ich suchte in Qiita nach Kommentaren, als ich interessiert war.

Fazit

Es sieht aus wie eine Datei, die Ihre eigene Hilfsmethode beschreibt. (Selbstgemachter Helfer == Benutzerdefinierter Helfer) Da die Hilfsmethode bis heute nur die von Gem bereitgestellten Dinge verwendet hat Ich dachte intuitiv, dass dies nützlich sein würde.

Ich habe es sofort versucht

Ich werde auf die Qiita-Artikel anderer Leute verweisen Dieses Mal habe ich es für das Code-Refactoring meiner persönlich entwickelten App verwendet. Der Inhalt des Refactorings im Controller ist der Inhalt dieses Artikels.

Umgebung

Rails 5.2.3 Ruby 2.5.1

Wie benutzt man

Schauen wir uns zunächst den Controller an, der umgestaltet.

users_controller.rb


class UsersController < ApplicationController

~Kürzung~

  private
  def set_user
    @user = User.find(params[:id])
  end

  def check_user
    redirect_to new_user_registration_path, alert: 'Bitte einloggen oder anmelden' unless current_user.id == @user.id
  end
end

Weil das weniger als in der Methode check_user nicht cool ist Erstellen Sie eine Hilfsmethode und überarbeiten Sie sie.

helpers/users_helper.rb


module UsersHelper

  def current_user?(user)
    current_user.id == user.id
  end

end

Ich habe eine Hilfsmethode namens current_user? Erstellt. Dieser Methodenname und Inhalt scheint ziemlich Standard zu sein.
Direkt unter dem Verzeichnis namens Helfer Es gibt auch eine Datei namens application_helper.rb Es ist wie eine Datei, die Hilfsmethoden verwaltet, die Sie auf mehrere Controller und Ansichten anwenden.

users_controller.rb


class UsersController < ApplicationController
  include UsersHelper

~Kürzung~

  private
  def set_user
    @user = User.find(params[:id])
  end

  def check_user
    redirect_to new_user_registration_path, alert: 'Bitte einloggen oder anmelden' if !current_user?(@user)
  end
end

Erläuterung

Bei Verwendung des eigenen Hilfsprogramms der Hilfsdatei im Controller Es scheint notwendig zu sein, mit include wie in der zweiten Zeile zu lesen.

Außerdem wurde die Beschreibung "es sei denn" in "if! ~" Geändert. Dies machte den Code ein wenig sauberer.

Refactor posts_controller mit ähnlichem Inhalt.

posts_controller.rb


class PostsController < ApplicationController
  

  def edit
    redirect_to new_user_registration_path, alert: 'Bitte loggen Sie sich ein' unless current_user.id == @a_post.user_id
  end

  def destroy
    redirect_to new_user_registration_path, alert: 'Bitte loggen Sie sich ein' unless current_user.id == @a_post.user_id
    if @a_post.destroy
      redirect_to root_path, notice: 'Beitrag gelöscht'
    else
      render :show, notice: 'Der Beitrag konnte nicht gelöscht werden'
    end
  end


  private

  def set_post
    @a_post = Post.find(params[:id])
  end
end

Auch hier werden wir die folgende Beschreibung ändern, es sei denn.

Erstellen Sie zunächst eine Hilfsmethode.

helpers/posts_helper.rb


module PostsHelper

  def current_user_post?(a_post)
    current_user.id == a_post.user_id
  end

end

Wir werden dies auf den Controller anwenden.

posts_controller.rb


class PostsController < ApplicationController
  include PostsHelper

  def edit
    redirect_to new_user_registration_path, alert: 'Bitte loggen Sie sich ein' if !current_user_post?(@a_post)
  end

  def destroy
    redirect_to new_user_registration_path, alert: 'Bitte loggen Sie sich ein' if !current_user_post?(@a_post)
    if @a_post.destroy
      redirect_to root_path, notice: 'Beitrag gelöscht'
    else
      render :show, notice: 'Der Beitrag konnte nicht gelöscht werden'
    end
  end

  private

  def set_post
    @a_post = Post.find(params[:id])
  end
end

Dies ist auch nach dem Laden des Helfers und dem Refactoring abgeschlossen.

Schließlich

Dieses Mal habe ich einen Artikel über den Controller geschrieben, der jedoch nicht nur für selbst erstellte Helfer, sondern auch für Ansichten verwendet werden kann. Wenn Sie es für eine Ansicht verwenden, scheint es im Gegensatz zum Controller nicht erforderlich zu sein, das Lesen zu beschreiben. Danach werde ich auch den Code in der Ansichtsdatei umgestalten.

Wenn Sie Mängel feststellen, teilen Sie uns dies bitte in den Kommentaren mit.

Referenzartikel

Recommended Posts

Die Geschichte des Refactorings mit einem selbstgemachten Helfer zum ersten Mal in einer Rails-App
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
So dekorieren Sie CSS auf Rails6 form_with (Hilfs-) Optionsfeldern
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Die Geschichte der ersten Veröffentlichung der Android-App im Play Store.
Die Geschichte des Lernens von Java in der ersten Programmierung
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Die Geschichte der Optimierung der Android-App mit libGDX
Eine Überprüfung des von Rails-Anfängern verwendeten Codes
[Jackson] Eine Geschichte über das Konvertieren des Rückgabewerts des Big Decimal-Typs mit einem benutzerdefinierten Serializer.
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Erste selbst erstellte App von einem Abiturienten-Einführung-
Etwa der Ablauf der Entwicklung von Webanwendungen mit Rails.
Die Geschichte von dto, dao-like mit Java, SQLite
Die Geschichte, wie ein Docker-Container mit GitHub-Aktionen in die GitHub-Paketregistrierung und den Docker-Hub verschoben wird
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
[Erster Beitrag] Eine Geschichte über einen zweiten neuen Absolventen der Universität für Leibeserziehung, der ein unerfahrener Programmierer wird
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Zusammenfassung der ersten Arbeiten beim Erstellen einer App mit Rails
Überprüfen Sie die Funktion von zwei Rollen mit einer Chat-Anwendung
Ein Hinweis zum Seed-Feature von Ruby on Rails
Eine Geschichte, die von String () von Interface abhängig ist und von JdkDynamicAopProxy vertreten wird
Eine Reihe von Schritten zum Erstellen von Ergebnissen für Portfolios mit Rails
Erläutern Sie die Vorzüge des staatlichen Musters anhand des Bewertungsurteils des Films
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Erstmaliges Modellieren von Digimon mit DDD Teil 1
Eine Geschichte, die bei NotSerializableException steckt
Erstellen Sie mit der Datei Ruby on Rails seeds.rb eine große Anzahl von Datensätzen mit einem einzigen Befehl
Wenn ein Anfänger eine persönliche App mit Schienen erstellt, muss das Verfahren trotzdem zum Startpunkt gebracht werden.
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
[Rails] Ich habe eine einfache Kalender-Mini-App mit benutzerdefinierten Spezifikationen erstellt.
Eine Geschichte über die Verbindung zu einem CentOS 8-Server mit einem alten Ansible
Die Geschichte von toString () beginnt mit der Übergabe eines Arrays an System.out.println
Die Geschichte eines Othello-Spiels vom Kommunikationstyp mit Scala.
Die Geschichte des Anhaltens, weil der Schienentest nicht durchgeführt werden konnte
[Illustration] Finden der Summe von Münzen mit einer rekursiven Funktion [Ruby]
[Selbststudium] Erstellen eines Portfolios (Original-App) nach Abschluss des Rails-Tutorials
Die Geschichte, ein Projekt zu bauen, das Maven mit Ant gebaut hat
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Exportieren (Ausgeben) einer großen Menge von CSVs, z. B. Protokollinformationen in der WEB-Anwendung, mit der Rails-Anwendung
[Schienen] Überprüfen Sie den Inhalt des Objekts
[Java Edition] Geschichte der Serialisierung
Erläuterung der Reihenfolge der Schienenrouten
Erstellen einer Timer-App mit Schlamm