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.
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.
In Anbetracht jeder oben erwähnten Rolle von MVC wird das für die Datenverarbeitung / -verarbeitung verantwortliche Verfahren in Modell beschrieben.
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.order(created_at: :desc).limit(10)
end
end
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
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
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
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