从某些视图中排除部分视图

时间:2016-05-20 19:30:58

标签: html ruby-on-rails iframe

在我当前的Rails应用程序中,我的布局文件夹中有一部分用于导航侧边栏。除了我的得分控制器的newthankyou操作之外,我希望此侧边栏能够呈现我的应用的每个页面,因为这两个视图将成为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"}

由于

2 个答案:

答案 0 :(得分:2)

你的application.html.erb中的

......

<%= 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>

它更具可读性。