2012/01/17

Einbinden von Styles und Scripts


Nach der vierten Auflage von "Agile Web Development with Rails" - und damit vermutlich nach den Konventionen von Rails < 3.1 - gehören Stylesheets und Javascripts in den /public/stylesheets Ordner und wird mit folgendem Methodenaufruf in das Layout geladen:
<%= stylesheet_link_tag "application" %>

Der String-Parameter "application" gibt an, welche CSS geladen wird.
Leider verlinkt der ausgegebene Link-Tag nicht auf den Ordner /public sondern /assets
Nach einer schnellen Suche im Ruby on Rails Guide ist eine Funktion namens Asset Pipeline per default eingeschaltet: http://guides.rubyonrails.org/asset_pipeline.html
Diese Funktion erlaubt es, Javascript und CSS zu bündeln und zu komprimieren um die Applikation zu optimieren.
Ebenso interessant dieser Funktion ist in Kapitel 2 des obigen Links nachzulesen: Es ermöglicht dem Entwickler, beispielsweise CSS nur dann zu laden, wenn es auch wirklich gebraucht wird. Dies wird über Controller definiert.
Der Scaffold-Befehl wird automatisch für jeden Controller in /assets/stylesheets/ eine CSS Datei erstellen.
Wenn man aber nun statt application.css eine andere CSS-Datei einbinden möchte, trifft man auf folgenden Fehler: 
Sprockets::CircularDependencyError in Controllername::Actionname

Um diesen Fehler zu umgehen, muss man die application.css löschen.
Damit immer nur das nötigste geladen wird lässt sich nun mit
<%= stylesheet_link_tag params[:controller] %>

die jeweilige CSS zum aufgerufenen Controller laden. Diese werden, wie schon erwähnt, mit jedem Scaffold automatisch erstellt und mit dem Suffix .css.scss in /assets/stylesheets/ abgelegt. 
Auf anhieb hat dies bei mir nicht funktioniert, aber nach einem Neustart des Servers wurden dann nur die nötigen CSS-Dateien geladen.

No comments:

Post a Comment