2016-08-29 4 views
1

In meiner Anwendung habe ich viele Controller und Tonnen von CSS, die möglicherweise konfliktträchtig sein könnte, wenn alle zusammen plopped. Aus diesem Grund verknüpfe ich meine Stylesheets auf einer Controller-zu-Controller-Basis. Die Ruby on Rails Guides schlägt folgende:Rendering nur Controller-spezifische Stylesheets nicht auf erste Anfrage

Sie können auch entscheiden, Controller spezifische Sheets enthalten und JavaScript-Dateien nur in ihren jeweiligen Controller mit dem folgenden:

% = javascript_include_tag params [: controller]%> oder <% = stylesheet_link_tag params [: controller]%>

(ich hatte das erste < von <% = wegen Stapelüberlauf Block Anführungszeichen weglassen.)

Deshalb

, hier ist die resultierende Spitze meiner application.html.erb Datei:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
<%= javascript_include_tag params[:controller] %> 
<%= stylesheet_link_tag params[:controller] %> 

I CSS für eine Navigationsleiste geteilt haben, die @import [ed] in meiner application.css Datei ist, und das funktioniert immer gut. Die Navigationsleiste ist immer richtig formatiert. Das Problem ist, wenn ich eine bestimmte Seite auf der ersten Seitenanforderung besuchen, die relevante CSS zu diesem Controller nicht geladen ist. Und in den Protokollen wird nie eine Anforderung für die Stylesheets des Controllers gestellt. Aber auf der zweiten Seite Seitenanforderung, wird es gestylt, und die Protokolle zeigen, dass die Stylesheets angefordert wurden.

Jeder Grund, warum das ist?

Nachfolgend finden Sie einige relevante Code zu diesem Thema:

/* 
* This is a manifest file that'll be compiled into application.css, which will include all the files 
* listed below. 
* 
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 
* 
* You're free to add application-wide styles to this file and they'll appear at the top of the 
* compiled file, but it's generally better to create a new file per style scope. 
* 
*= require_self 
*/ 
@import 'normalize'; 
@import 'sass_vars'; 
@import 'sitewide'; 
@import "https://fonts.googleapis.com/css?family=Nunito:300,400,700"; 

Und in meiner config/initializers/assets.rb ich alle Namen meiner Javascript und CSS-Dateien auf der Linie

hinzugefügt
Rails.application.config.assets.precompile += ...... 
+1

Entfernen Sie die Turbolinks vollständig von Ihrem Projekt. Es besteht eine Wahrscheinlichkeit von 90%, dass es Ihr Problem löst. –

+0

Geht es nur um das Entfernen der Turbolinks? – Parker

+0

Es löste mein Problem, Michal !!!! Sie sollten Ihren Kommentar umschreiben und ihn als Antwort eingeben, damit ich ihn aufwerten und als Antwort auf meine Frage bestätigen kann. – Parker

Antwort

1

Wenn Sie Turbolinks nicht verwenden, entfernen Sie es aus Ihrem Projekt. Es umfasst:

  • turbolinks gem
  • Entfernen erfordert von application.js entfernen und application.css
  • Daten-turbolinks-Track-Attribut aus Ihrem Layout

Und bedenken Sie für die Verwendung von rails new --skip-turbolinks Entfernen Sie Ihre nächstes Projekt.