27 votes

Où placer les fonctions "utilitaires" du modèle dans Ruby on Rails

J'ai une application rails avec plusieurs modèles.

J'ai une fonction à laquelle je veux accéder à partir de plusieurs modèles.

Quel est le meilleur endroit pour mettre ce code et comment puis-je le rendre accessible à partir des modèles qui doivent y accéder?

Ma compréhension est que les assistants sont juste pour des vues. Est-ce correct?

Il semble incorrect de créer un plug-in et de le placer dans le dossier du fournisseur - ceci est mon code et fait partie intégrante de mon application. Est-ce correct?

Merci.

31voto

Luke Redpath Points 4424

La solution la plus simple serait de créer un module sous lib et de le mélanger dans les modèles qui en ont besoin, par exemple, dans lib / fooable.rb:

 module Fooable
  def do_foo
  end
end
 

Et puis dans vos différents modèles:

 class MyModel < ActiveRecord::Base
  include Fooable
end
 

Pas besoin d'exiger fooable.rb, le mécanisme de chargement automatique de Rails le trouvera pour vous tant qu'il est nommé en utilisant les conventions correctes.

1voto

Yaraher Points 2287

Afin de réduire la répétition du code, vous pouvez également créer une classe principale qui inclurait ce module et l'hériterait simplement de chaque modèle dont vous souhaitez partager le comportement.

Quelque chose comme:

 module Fooable
  def do_foo
  end
end

class ParentModel < ActiveRecord::Base
  include Fooable
end

class Product < ParentModel end
class User < ParentModel end
class Item < ActiveRecord::Base end
 

Ainsi, dans cet exemple, Product et User partageraient la fonctionnalité do_foo et Item ne le ferait pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X