J'ai une méthode commune qui existe dans mon modèle car elle est appelée par mon modèle. Rétrospectivement, mon point de vue requiert également cette méthode de modèle. Pour ce faire, j'ai:
application_helper.rb
include ApplicationHelper
en haut de mon modèle ActiveRecordFonctionnalité sage, ça marche. Mais est-ce une bonne pratique?
Mon modèle ressemble à ceci:
class Client < ActiveRecord::Base
include ApplicationHelper
end
Écrire include ApplicationHelper
dans votre modèle est une mauvaise pratique, car ApplicationHelper est un endroit agréable pour insérer des tonnes de fonctions d'assistance dont vous avez besoin. Ces fonctions finiront par être importées en tant que méthodes d'instance de votre modèle. Ces fonctions ne sont généralement pas liées à votre modèle et ne fonctionneront pas si elles dépendent d'éléments tels que params
ou request
. Voici deux autres options:
Option 1:
Vous pouvez simplement définir la méthode dans la classe Client
, puis l'appeler depuis la vue, comme suit:
class Client < ActiveRecord::Base
def self.my_class_method
end
def my_instance_method
end
end
Et ensuite à votre avis:
<%= Client.my_class_method %>
<%= @client.my_instance_method %>
Option 2:
Créez un module séparé dans lib
et incluez-le là où vous en avez besoin. Le nom du fichier doit correspondre au nom du module pour que le chargement automatique fonctionne.
Dans lib/my_module.rb
:
module MyModule
def my_method
end
end
Dans votre modèle:
class Client < ActiveRecord::Base
include MyModule
def other_method
my_method
end
end
Incluez le module dans ApplicationHelper afin qu'il soit disponible pour toutes vos vues:
module ApplicationHelper
include MyModule
end
Ensuite, à votre avis, vous pouvez l'appeler facilement:
<%= my_method %>
5 Méthode commune dans le modèle et l'aide:
Option 1:
You can just define the method inside the Client class, and then call it from the view,
like this:
class Client < ActiveRecord::Base
def self.my_class_method
end
def my_instance_method
end
end
And then in your view:
<%= Client.my_class_method %>
<%= @client.my_instance_method %>
Option 2:
module MyModule
def my_method
end
end
Include the module in ApplicationHelper so it is available to all your views:
module ApplicationHelper
include MyModule
end
Then in your view you can call it easily:
<%= my_method %>
option 3:
module MyModule
def my_method(amount)
end
end
In your model:
class Client < ActiveRecord::Base
include MyModule
def self.other_method(amount)
my_method(amount)
end
end
Then in your view you can call it easily:
<%= Client.other_method(amount) %>
Option 4: Ou vous pouvez déclarer la méthode d'assistance en tant que fonction de classe et l'utiliser comme suit:
module Myhelper
def self.my_village
"bikharniyan kallan,Rajasthan,India"
end
end
Then in your view you can call it easily:
<%= Myhelper.my_village %>
option 5: utilise plusieurs assistants dans le contrôleur helper =>
module Myhelper
def my_info
"my information is"
end
end
module Myhelper1
def my_village
"bikharniyan kallan,Rajasthan,India"
end
end
ApplicationHelper=>
module ApplicationHelper
include Myhelper
include Myhelper1
end
ApplicationController
class ApplicationController < ActionController::Base
include ApplicationHelper
end
YourController
class YourController < ActionController::Base
def action
my_info
my_village
end
end
En ce moment, avec Rails 5, vous pouvez simplement Transférer votre méthode habituelle dans application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def self.common_class_method
# some awesome implement
end
def common_method
# implement this
end
end
Ensuite, dans chaque classe de modèle, vous pouvez appeler common_class_method
par: YourClassName.common_class_method
ou appelez common_method
par: YourClassInstance.common_method
Si vous voulez voulez le déplacer vers un assistant, vous devez le déplacer dans client_helper, car il s’agit uniquement de votre modèle Client et non de l’application entière.
La méthode dont vous parlez est-elle une méthode de classe statique ou une méthode d'instance? S'il s'agit d'une méthode d'instance, vos modèles (même s'ils se trouvent dans des vues) peuvent appeler cette méthode. S'il s'agit d'une méthode de classe statique, vos vues peuvent également l'utiliser en l'appelant comme toute autre méthode de classe statique (par exemple, Client.do_method
ou quelque chose du genre).
Je ne vois aucune raison pour laquelle il faut faire appel à une aide, à moins que votre méthode n'ait absolument rien à voir avec votre modèle, auquel cas ce serait une question différente.