2016-05-20 10 views
0

in meiner aktuellen Rails-App, ich habe eine teilweise in meinem Layouts-Ordner für eine Navigation Sidebar. Ich möchte, dass diese Seitenleiste für jede Seite meiner App gerendert wird, mit Ausnahme der Aktionen new und thankyou meines Score-Controllers, da diese beiden Ansichten Teil eines Iframes sind. Um dies zu tun, mache ich ein anderes Layout namens iframe.html.erb, wo ich die Logik zum Ausschließen der Navigation Sidebar setzen möchte.Ein Teil aus bestimmten Ansichten ausschließen

Hier ist meine application.html.erb Layout-Datei

<!DOCTYPE html> 
<html> 
<head> 
    <title>NPS</title> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

    <div id="wrapper"> 

     <%= render 'shared/navigation' %> 
     <%= yield %> 
    </div> 

</body> 
</html> 

Und hier ist meine iframe.html.erb Datei

<!DOCTYPE html> 
<html> 
<head> 
    <title>NPS</title> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

    <div id="wrapper"> 

     <%= if (current_page?(controller: 'scores', action: 'new') || current_page?(controller: 'scores', action: 'thankyou')) do %> 
      <%= yield %> 
     <% end %> 
    </div> 

</body> 
</html> 

ich zunächst eine unless Aussage in meiner Anwendung Layout nur hatte aber das würde auf der Seite sign-in nicht funktionieren, weil Devise nach den Scores-Views im Devise-Ordner suchen würde. Ich bin auch nicht sehr gut mit html.erb, also tut mir leid, wenn es nur eine Syntax-Sache ist.

Edit:

Hier ist der Fehler, den ich mit devise bekommen

ActionController::UrlGenerationError at /users/sign_in 
No route matches {:action=>"new", :controller=>"devise/scores"} 

Dank

Antwort

2

in Ihrem application.html.erb ...

<%= render 'shared/navigation' unless @disable_nav %> 

Dann in Ihrer Partitur Controller, auf dem Sie Ihre zwei Ansichten haben haben ...

def new 
    @disable_nav = true 
    # ... 
end 

def thankyou 
    @disable_nav = true 
    # ... 
end 
0

Sie nicht falsch für das und Ihre Syntax ist zwei Layouts benötigen. Entfernen Sie iframe.html.erb.

Es gibt mehrere Möglichkeiten, dies zu tun. Versuchen Sie dieses in application.html.erb:

<div id="wrapper"> 
    <% if !current_page?(controller: 'scores', action: 'new') && !current_page?(controller: 'scores', action: 'thankyou') %> 
    <%= render 'shared/navigation' %> 
    <% end %> 

    <%= yield %> 
</div> 

Es sollte einfach funktionieren. Es kann jedoch verbessert werden. Verschieben Sie diese Logik in Ihre application_helper.rb:

def should_show_navigation? 
    !current_page?(controller: 'scores', action: 'new') && 
    !current_page?(controller: 'scores', action: 'thankyou') 
end 

Und dann, in Ihrem Layout-Datei (application.html.erb):

<div id="wrapper"> 
    <% if should_show_navigation? %> 
    <%= render 'shared/navigation' %> 
    <% end %> 

    <%= yield %> 
</div> 

es besser lesbar wird.

+0

ja ich so etwas wie dieses hatte vor Das Problem ist, wenn ich mich abmelde, es gibt mir einen Fehler wegen der Entwicklung. Ich bearbeite meinen Beitrag, um den Fehler zu zeigen, damit Sie besser verstehen können. Wegen dieser Aussage in der Datei application.html.erb denkt Devise, dass diese Controller und Views im Devise-Unterverzeichnis meiner Views – Spance

+0

versuchen, 'current_page? (controller: '/ scores', action: 'new')' then , ob das funktioniert. – Diego

Verwandte Themen