La quantité de code qui augmente et la lisibilité qui diminue lorsque vous l'écrivez comme vous le souhaitez sans y penser ... Pour les débutants, nous avons résumé les méthodes qui peuvent être utilisées pour chaque MVC afin qu'elles puissent être résumées le plus concis possible.
MVC | rôle |
---|---|
Model | Manipulation des données manipulées par l'application/En traitement |
View | Affichage des informations à l'utilisateur, réception des entrées de l'utilisateur |
Controller | Échangez des informations avec Model et View |
Comprenez ce rôle et décrivez le traitement approprié pour chaque rôle. Si vous écrivez dans chaque fichier comme vous le souhaitez sans tenir compte du rôle, la maintenance deviendra difficile. Par exemple, si le processus à décrire dans Model est décrit dans Controller, Fat Controller Des problèmes tels que (Contrôleur avec beaucoup de code écrit et gonflé) sont susceptibles de se produire.
Compte tenu de chaque rôle de MVC mentionné ci-dessus, la méthode responsable du traitement / traitement des données est décrite dans Modèle.
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.order(created_at: :desc).limit(10)
end
end
Défini comme une méthode de classe afin qu'elle puisse être appelée directement dans la classe Model.
app/models/post.rb
class Post < ApplicationRecord
def self.latest(number)
order(created_at: :desc).limit(number)
end
end
Appeler une méthode sur le contrôleur
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.latest(10)
end
end
Vous pouvez également utiliser la portée au lieu des méthodes de classe.
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
Lorsque le même processus est décrit à plusieurs reprises dans plusieurs modèles, Concern peut être utilisé pour supprimer le processus commun.
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
Créez un fichier dans app / models / concerts et décrivez le traitement courant.
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
Un traitement commun peut être utilisé en incluant dans chaque modèle.
app/models/post.rb
include CommonModule
app/models/comment.rb
include CommonModule
La description de la validation, qui a tendance à être longue, peut être découpée au validateur. Créez un répertoire de validateurs sous le répertoire de l'application et créez un fichier pour la validation.
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, "Contient des mots interdits.")
end
end
end
Décrivez en plus du côté du modèle.
app/models/post.rb
validates_with PostValidator
Les rappels peuvent également être supprimés du modèle. Créez un répertoire app / callbacks et créez un fichier pour les rappels. (Le nom de la classe doit être le même que le nom du rappel)
app/callbacks/post_callback.rb
class PostCallback
def before_create(post)
post.title = "No Title" if post.title.blank?
end
end
Décrivez en plus du côté du modèle.
app/models/post.rb
before_create PostCallback.new
Recommended Posts