Ruby on Rails Zusammenfassung der Beispiele für Refactoring-Methoden rund um MVC

Die Menge an Code, die zunimmt, und die Lesbarkeit, die abnimmt, wenn Sie ihn nach Ihren Wünschen schreiben, ohne darüber nachzudenken ... Für Anfänger haben wir die Methoden zusammengefasst, die für jede MVC verwendet werden können, damit sie so präzise wie möglich zusammengefasst werden können.

Überprüfen Sie die Rolle von MVC

MVC Rolle
Model Manipulation von Daten, die von der Anwendung verarbeitet werden/wird bearbeitet
View Anzeigen von Informationen für den Benutzer, Empfangen von Eingaben vom Benutzer
Controller Tauschen Sie Informationen mit Modell und Ansicht aus

Verstehen Sie diese Rolle und beschreiben Sie die für jede Rolle geeignete Verarbeitung. Wenn Sie in jede Datei schreiben, wie Sie möchten, ohne die Rolle zu berücksichtigen, wird die Wartung schwierig. Wenn der in Modell zu beschreibende Prozess beispielsweise in Controller, Fat Controller beschrieben ist Probleme wie (Controller mit viel geschriebenem und geschwollenem Code) treten wahrscheinlich auf.

So reduzieren Sie die Codemenge in Controller

Beschreiben Sie im Modell.

In Anbetracht jeder oben erwähnten Rolle von MVC wird das für die Datenverarbeitung / -verarbeitung verantwortliche Verfahren in Modell beschrieben.

Vor der Korrektur

app/controllers/posts_controller.rb


class PostsController < ApplicationController
  def index
    @posts = Post.order(created_at: :desc).limit(10)
  end
end

Nach der Korrektur (zu Modell wechseln)

Definiert als Klassenmethode, damit sie direkt an die Model-Klasse aufgerufen werden kann.

app/models/post.rb


class Post < ApplicationRecord
  def self.latest(number)
    order(created_at: :desc).limit(number)
  end
end

Rufen Sie eine Methode auf dem Controller auf

app/controllers/posts_controller.rb


class PostsController < ApplicationController
  def index
    @posts = Post.latest(10)
  end
end

Sie können auch den Bereich anstelle von Klassenmethoden verwenden.

app/models/post.rb


class Post < ApplicationRecord
  scope :latest, -> (number = 10){order(created_at: :desc).limit(number)}
end

app/controllers/posts_controller.rb


class PostsController < ApplicationController
  def index
    @posts = Post.latest
  end
end

So reduzieren Sie die Codemenge in Model

Verwenden Sie Bedenken

Wenn derselbe Prozess in mehreren Modellen wiederholt beschrieben wird, kann Concern verwendet werden, um den gemeinsamen Prozess auszuschneiden.

app/models/post.rb


scope :latest, -> (number = 10){order(created_at: :desc).limit(number)}
def hoge
  puts "hogehoge"
end

app/models/comment.rb


scope :latest, -> (number = 10){order(created_at: :desc).limit(number)}
def hoge
  puts "hogehoge"
end

Erstellen Sie eine Datei in App / Models / Konzerten und beschreiben Sie die allgemeine Verarbeitung.

app/models/concerns/common_module.rb


module CommonModule
  extend ActiveSupport::Concern
  included do
    scope :latest, -> (number = 10){order(created_at: :desc).limit(number)}
    def self.hoge
      puts "hogehoge"
    end
  end
end

Die allgemeine Verarbeitung kann verwendet werden, indem sie in jedes Modell aufgenommen wird.

app/models/post.rb


include CommonModule

app/models/comment.rb


include CommonModule

Validierung ausschneiden

Die Beschreibung der Validierung, die in der Regel lang ist, kann dem Validator zugeschnitten werden. Erstellen Sie ein Validator-Verzeichnis unter dem App-Verzeichnis und erstellen Sie eine Datei zur Validierung.

app/validators/post_validator.rb


class PostValidator < ActiveModel::Validator
  def validate(record)
    prohibited_words = ["baka","aho"]
    if prohibited_words.any?{ |word| record.content.include?(word) }
      record.errors.add(:content, "Enthält verbotene Wörter.")
    end
  end
end

Beschreiben Sie zusätzlich auf der Modellseite.

app/models/post.rb


validates_with PostValidator

Schneiden Sie den Rückruf aus

Rückrufe können auch aus dem Modell ausgeschnitten werden. Erstellen Sie ein App- / Rückrufverzeichnis und eine Datei für Rückrufe. (Der Klassenname sollte mit dem Rückrufnamen übereinstimmen.)

app/callbacks/post_callback.rb


class PostCallback
  def before_create(post)
    post.title = "No Title" if post.title.blank?
  end
end

Beschreiben Sie zusätzlich auf der Modellseite.

app/models/post.rb


before_create PostCallback.new

Recommended Posts

Ruby on Rails Zusammenfassung der Beispiele für Refactoring-Methoden rund um MVC
Zusammenfassung der Ruby on Rails-Validierung
Zusammenfassung der Methoden zum Aktualisieren mehrerer Spalten [Ruby on Rails]
Ruby on Rails-Variablen, konstante Zusammenfassung
[Ruby on Rails] Praktische Hilfsmethode
[Ruby on Rails] Kein Methodenfehler undefinierte Methode `devise_for'error Auflösung
Ruby on Rails ~ Grundlagen von MVC und Router ~
Ruby on Rails So implementieren Sie die automatische Adresseneingabe
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
[Ruby] Zusammenfassung der Methodendefinitionen
[Ruby on Rails] Suchfunktion (Modell, Methodenauswahlformel)
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
Ruby on Rails Lernrekord -2020.10.09
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
[Ruby] Hinweise zur Methode gets
Ruby on Rails Lernrekord -2020.10.06
Ruby on Rails Grundlegendes Memorandum
[Ruby on Rails] undefinierte Methode `id'for nil: NilClass-Fehlerbehebungsmethode
Ruby on Rails-Datensatzsuche, erstellen Sie die Methode find_or_create_by, wenn nicht
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Grundkenntnisse in Ruby on Rails
Verwendung von Ruby on Rails
Ruby on Rails Japanisch-Englisch kompatibler i18n
(Ruby on Rails6) Gepostete Inhalte "löschen"
[Ruby on Rails] CSV-Ausgabefunktion
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
[Ruby on Rails] Erstellung der Bestätigungsseite
Ruby On Rails entwickelt Routing-Konflikte
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
[Ruby on Rails] Stoppen Sie "Looping bis ..."
[Ruby on Rails] Kein Methodenfehler: undefinierte Methode `t'for # <ActiveRecord :: Migration: 〇〇〇〇> Umgang mit Fehlern
[Ruby on Rails] Folgen Sie der undefinierten Methode `id'for nil: Beheben Sie den Fehler NilClass
[Ruby on Rails] Einführung der Anfangsdaten
[Ruby on Rails] Erstellen eines Anfrageformulars
Ruby on Rails6 Praktischer Leitfaden cp13 ~ cp15 [Memo]
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Codeprüfung mit Rubocop-Airbnb
[Ruby on Rails] 1 Modell CRUD (Routing Main)