Est-il judicieux de créer une gemme Ruby composée uniquement de partiels de modèles Rails?

StackOverflow https://stackoverflow.com/questions/1623628

  •  06-07-2019
  •  | 
  •  

Question

J'essaie de comprendre ce qui fonctionne et ce qui ne fonctionne pas dans les bijoux Ruby (principalement dans l'optique d'en créer un pour moi-même et de réutiliser les fonctionnalités d'un projet à l'autre).

Lorsque vous créez un joyau Ruby, êtes-vous limité à inclure uniquement la fonctionnalité Ruby ou pouvez-vous créer un joyau constitué de modèles Rails, de fichiers CSS et de scripts Java?

Si tel est le cas, comment l'utilisateur de la gem peut-il accéder à ces ressources dans un projet Rails (en plus d'ajouter une instruction "config gem" au fichier environment.rb?

Était-ce utile?

La solution

Non, ce n'est pas le cas. Les gems sont des bibliothèques de code, pas des fichiers statiques.

Lorsque vous chargez une gemme, vous ne déplacez pas les fichiers dans votre répertoire public. Vous chargez un fichier ruby ??et accédez à un module. Vous ne pouvez donc exécuter que du code ruby.
Cependant, votre code ruby ??peut vous fournir des aides vous permettant de construire facilement votre conception, par exemple.

Si vous souhaitez inclure des ressources de fichiers statiques dans chacun de vos projets Ruby, deux solutions vous sont proposées:

  • Créez un projet de modèle, y compris tous les fichiers css, javascript, etc. que vous utilisez à chaque fois. Vous pouvez prendre les bretelles comme exemple.

  • Créez un nouveau référentiel avec tous ces fichiers statiques et ajoutez-le en tant que sous-module (avec git ou svn ) et l'inclure dans chacun de vos projets.

La première solution serait ma préférée, mais vous voudrez peut-être prendre l'autre.

Autres conseils

Comme le note dmathieu, les gems concernent les bibliothèques Ruby installées dans le chemin de chargement du système, et non les éléments placés dans le répertoire de votre projet. Toutefois, si vous souhaitez conditionner votre squelette de projet de rails en tant que gemme, il serait assez simple de disposer d'un petit exécutable ruby ??qui servira de générateur pour copier l'arborescence du projet squelette dans un répertoire cible. Vous pouvez ensuite regrouper le tout dans une gemme, vos fichiers squelettes peuvent être placés dans le répertoire gem et vous pouvez dire generate_new_project someproject pour les copier dans votre nouveau répertoire de projet.

Vous pouvez ajouter facilement des partiels et d'autres vues HAML, Builder ou ERB. La structure suivante devrait fonctionner:

# in my_gem/rails/init.rb
ActionController::Base.append_view_path(File.expand_path(File.join(File.dirname(__FILE__), '..', 'views')))

# in my_gem/views/my_gem/_some_partial.html.erb
This is a partial from MyGem!

# in your_rails_app/views/some_controller/some_view.html.erb:
<%= render :partial => '/my_gem/some_partial' -%>

Cela ne répond toutefois pas directement à votre question sur les fichiers statiques. Le meilleur choix est souvent un générateur qui copie les fichiers CSS, JS et autres dans votre répertoire public. Vous pouvez également utiliser un StaticFilesController et placer les fichiers statiques dans ce répertoire de vues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top