2014-03-25 9 views
5

Ich erstelle eine Rails App und ich muss die Kopfzeile für die Startseite unterscheiden.Schienen, render eine andere Kopfzeile nur auf der Startseite

Ich habe bereits eine partielle mit der _home_header-Version und der _header-Version erstellt, um auf jeder Seite zu verwenden, aber ich weiß nicht, wie ich die Änderung verwalten kann.

Die Kopfzeile ist in meinem Layout enthalten, und ich rendere das gleiche Layout für jede Seite. Wie kann ich "Layout" sagen, dass ich die _home_header-Version anstelle der Standardversion verwenden soll, wenn ich eine Homepage anfordere?

+0

Können Sie content_for in der Ansicht für die Homepage verwenden? http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for – katzmopolitan

Antwort

10

würde ich den current_page? Helfer verwenden und sehen Sie die root_path.

# app/views/layouts/application.html.erb 
<% if current_page?(root_path) %> 
    <%= render 'layouts/home_header' %> 
<% else %> 
    <%= render 'layouts/header' %> 
<% end %> 
0

Normalerweise fügen Sie spezifischere Versionen von Seiten in Controller-spezifischen Unterverzeichnissen hinzu.

Das heißt, wenn Sie ein Layout application.html.erb haben, die einen Kopfteil macht ...

# app/views/layouts/application.html.erb 
<!doctype html> 
<html> 
... 
<body> 
    <%= render 'header' %> 
    ... 

Diese für eine header Teil erste aussehen in app/views/<controller_name>/ dann in app/views/application/. Ihre Website-weite Kopfzeile würde also in app/views/application/_header.html.erb liegen, und Ihre Homepage wäre teilweise in app/views/home/_header.html.erb resident und würde "einfach funktionieren". Rails laden den "spezifischeren" Header.

+0

Ich weiß, aber ich muss die Standardversion in jeder Ansicht hinzufügen ... Ich muss nur die Kopfzeile überschreiben, wenn ich Homepage laden. –

1

Eine Option Vorschlag @meagar ein before_action auf Ihrer Anwendungssteuerung für das nutzen würde:

class ApplicationController 
    beore_action :set_header 

    private 

    def set_header 
     @header = if is_my_page 
     "Special header" 
     else 
     "Other header" 
     end 
    end 
end 

und in Ihrem layouts/application.html.erb:

<title><%[email protected]%></title> 

Der hellen Teil seiner Lösung das ist alles Text wird in den View-Dateien gespeichert, was sinnvoll ist. Der nicht so helle Teil ist schwerer zu folgen.

2

Verwendung so etwas wie dies in application.html.erb

<% if request.original_url == root_url %> ## Specify the home url instead of root_url(if they are different) 
    <%= render 'layouts/home_header' %>  ## Assuming that _home_header.html.erb is under layouts directory 
<% else %> 
    <%= render 'layouts/header' %>   ## Assuming that _header.html.erb is under layouts directory 
<% end %> 
Verwandte Themen