在我当前的Rails应用程序中,我的布局文件夹中有一部分用于导航侧边栏。除了我的得分控制器的new
和thankyou
操作之外,我希望此侧边栏能够呈现我的应用的每个页面,因为这两个视图将成为iframe的一部分。为此,我制作了另一个名为iframe.html.erb
的布局,我希望将逻辑排除在导航边栏之外。
这是我的application.html.erb布局文件
<!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>
这是我的iframe.html.erb文件
<!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>
我最初在我的应用程序布局中只有一个unless
语句,但是在sign-in
页面上无法工作,因为设计将在devise文件夹中查找这些得分视图。我对html.erb也不是很好,所以如果它只是语法上的事情我很抱歉。
编辑:
这是我用设计得到的错误
ActionController::UrlGenerationError at /users/sign_in
No route matches {:action=>"new", :controller=>"devise/scores"}
由于
答案 0 :(得分:2)
......
<%= render 'shared/navigation' unless @disable_nav %>
然后在你的得分控制器中你有两个观点......
def new
@disable_nav = true
# ...
end
def thankyou
@disable_nav = true
# ...
end
答案 1 :(得分:0)
您不需要两个布局,并且语法不正确。删除iframe.html.erb
。
有几种方法可以做到这一点。在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>
它应该工作。但是,它可以改进。将此逻辑移至application_helper.rb
:
def should_show_navigation?
!current_page?(controller: 'scores', action: 'new') &&
!current_page?(controller: 'scores', action: 'thankyou')
end
然后,在您的布局文件(application.html.erb
)中:
<div id="wrapper">
<% if should_show_navigation? %>
<%= render 'shared/navigation' %>
<% end %>
<%= yield %>
</div>
它更具可读性。