2013-03-29 7 views
5

Chciałbym przetestować dwa różne interfejsy dla mojej aplikacji Rails. Idealnie chciałbym mieć dwa oddzielne pliki css, jeden powiązany z każdym interfejsem (np. New_interface.css i old_interface.css). Obecnie mam dwa różne części dla interfejsów, jeden o nazwie _new_interface.html.erb i jeden o nazwie _old_interface.html.erb. Jeśli chciałbym wywołać prawidłowy plik css, gdy załadowany jest dany widok, w jaki sposób mogę to zrobić? Na przykład, jeśli załaduję _new_interface.html.erb, chcę załadować plik new_interface.css i zignorować plik old_interface.css.Specyficzne dla strony CSS z Railsami App

Moja application.css:

/* 
*= require_tree 
*/ 
+1

Proszę sprawdzić poprzednie pytanie, chodzi o JavaScript, ale rozwiązanie jest takie samo dla CSS. http://stackoverflow.com/questions/6167805/using-rails-3-1- where-do-you-put-your-page-specific-javascript-code – depa

+0

Skończyło się na tym rozwiązaniu. Dzięki za twoją odpowiedź! – scientiffic

+0

Odpowiedziałem na to pytanie tutaj, jeśli potrzebujesz. http://stackoverflow.com/questions/26243434/separate-css-folders-for-separate-rails-controllers/26246392#26246392 – user3591126

Odpowiedz

5

To pytanie wydaje się być ukierunkowane na to, co trzeba zrobić: Using Rails 3.1 assets pipeline to conditionally use certain css

W skrócie, trzeba zreorganizować swoje aktywa folderu/app/stylów do niektóre podkatalogi i zmieniaj pliki manifestu, aby nie wszystko zostało dołączone do zestawu w czasie wykonywania.

Następnie można umieścić pewną logikę warunkową w widoku, aby załadować prawą wartość css dla zadania. Tag content_for prawdopodobnie przyda się tutaj. Możesz edytować app/views/layouts/application.html.erb i dołączyć linię tuż po drugim javascript <% = yield: view_specific_css%>. Następnie w pliku widoku można użyć

<% content_for :view_specific_css do %> 
    <%= stylesheet_link_tag "whatever %> 
<% end %> 
3

Należy zachować je zarówno jako część application.css i wykonaj następujące czynności

application.html.haml/erb

body{:class => @old_layout ? "old_layout" : "new_layout"} 

wtedy, gdy kiedykolwiek znajdujesz się w akcji, która jest poza starym układem w kontrolerze, po czym wprowadź

@old_layout = true 

Następnie w pliki css albo prepend wszystko z body.old_layout lub body.new_layout lub użyć SCSS, podzbiór Sass, a rap bieżące pliki css jak tak

body.old_layout{ 
    #all your old layout css goes here, all but body statements of course 
} 

body.new_layout{ 
    #all your new layout css goes here, all but body statements of course 
} 

W ten sposób można zachować rzeczy proste z jednym pliku css. A dzięki rozwiązaniu, które pozwala łatwo przełączać się po każdej czynności kontrolera pojedynczo.

+0

dzięki za odpowiedź. czy możesz wyjaśnić, co oznacza ta linia? body {: class => @old_layout? "old_layout": "new_layout"} Czy to oznacza, że ​​sprawdza wartość old_layout i czy tworzy klasę body old_layout, jeśli jest prawdziwa, a new_layout, jeśli jest false? – scientiffic

+1

Tak, to jest prawo. Ale pamiętaj, że zrobi to również new_layout, jeśli (at) old_layout jest równe zero, więc nie musisz ustawiać (at) old_layout w akcji kontrolera, gdy masz do czynienia z metodą, która używa nowego układu. Jest to również dobry sposób na zaznaczenie, które metody wymagają aktualizacji, ponieważ każdy z nich będzie zawierał (at) old_layout = true. – rovermicrover

Powiązane problemy