J'ai écrit des applications avec Ruby on Rails J'étais curieux à ce sujet.
Ce type qui accompagne chaque fois que vous créez un contrôleur 〇〇_helper.rb À quoi sert ce fichier ... Puisqu'il dit helper, est-ce lié aux méthodes d'assistance ...
En ce moment, je "Ce doit être un fichier pratique car il est créé en même temps." J'ai cherché dans Qiita des articles de commentaires car j'étais intéressé.
Cela ressemble à un fichier qui décrit votre propre méthode d'assistance. (Aide personnelle == aide personnalisée) Depuis que la méthode d'assistance n'a utilisé que les choses fournies par Gem jusqu'à aujourd'hui J'ai pensé intuitivement que ce serait utile.
Je ferai référence aux articles Qiita d'autres personnes Cette fois, je l'ai utilisé pour la refactorisation du code de mon application développée personnellement. Le contenu du refactoring dans le contrôleur est le contenu de cet article.
Rails 5.2.3 Ruby 2.5.1
Tout d'abord, regardons le contrôleur qui refactorise.
users_controller.rb
class UsersController < ApplicationController
~réduction~
private
def set_user
@user = User.find(params[:id])
end
def check_user
redirect_to new_user_registration_path, alert: 'S'il vous plaît vous connecter ou vous inscrire' unless current_user.id == @user.id
end
end
Parce que le moins que sauf dans la méthode appelée check_user n'est pas cool
Créez une méthode d'assistance et modifiez-la.
helpers/users_helper.rb
module UsersHelper
def current_user?(user)
current_user.id == user.id
end
end
J'ai créé une méthode d'assistance appelée current_user?.
Ce nom et ce contenu de méthode semblent être assez standard.
Directement sous le répertoire appelé helpers
Il existe également un fichier appelé application_helper.rb
C'est comme un fichier qui gère les méthodes d'assistance que vous appliquez à plusieurs contrôleurs et vues.
users_controller.rb
class UsersController < ApplicationController
include UsersHelper
~réduction~
private
def set_user
@user = User.find(params[:id])
end
def check_user
redirect_to new_user_registration_path, alert: 'S'il vous plaît vous connecter ou vous inscrire' if !current_user?(@user)
end
end
Lorsque vous utilisez le propre assistant du fichier d'assistance dans le contrôleur Il semble qu'il faut lire avec include comme dans la deuxième ligne.
De plus, la description "sauf" a été remplacée par "si! ~".
Cela a rendu le code un peu plus propre.
Refactorisez posts_controller avec un contenu similaire.
posts_controller.rb
class PostsController < ApplicationController
def edit
redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' unless current_user.id == @a_post.user_id
end
def destroy
redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' unless current_user.id == @a_post.user_id
if @a_post.destroy
redirect_to root_path, notice: 'Message supprimé'
else
render :show, notice: 'Le message n'a pas pu être supprimé'
end
end
private
def set_post
@a_post = Post.find(params[:id])
end
end
Ici aussi, nous modifierons la description ci-dessous à moins que.
Tout d'abord, créez une méthode d'assistance.
helpers/posts_helper.rb
module PostsHelper
def current_user_post?(a_post)
current_user.id == a_post.user_id
end
end
Nous appliquerons cela au contrôleur.
posts_controller.rb
class PostsController < ApplicationController
include PostsHelper
def edit
redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' if !current_user_post?(@a_post)
end
def destroy
redirect_to new_user_registration_path, alert: 'Veuillez vous connecter' if !current_user_post?(@a_post)
if @a_post.destroy
redirect_to root_path, notice: 'Message supprimé'
else
render :show, notice: 'Le message n'a pas pu être supprimé'
end
end
private
def set_post
@a_post = Post.find(params[:id])
end
end
Ceci est également terminé après le chargement de l'assistant et la refactorisation.
Cette fois, j'ai écrit un article axé sur le contrôleur, mais il peut être utilisé non seulement pour les assistants personnels, mais aussi pour les vues. De plus, lorsque vous l'utilisez pour une vue, contrairement au contrôleur, il semble qu'il n'y ait pas besoin de décrire la lecture. Je vais également refactoriser le code dans le fichier de vue après cela.
Si vous trouvez des lacunes, veuillez nous en informer dans les commentaires.
Recommended Posts