Rails and blade: 去掉 wrapper div 只是一些观点

Rails and blade: get rid of wrapper div only is some views

我调用 yield 的主布局如下所示:

<div class="container">
    <div class="col-sm-12">
        <%= yield %>
    </div>
</div>

这显然充当了我页面内容的包装器,我对整个开发过程都很满意。

但是,现在我正在尝试编辑一些视图,使它们有一个占据整个屏幕宽度的背景图像,所以这个包装器现在很不方便。

我想到了这样做的方式。因为我只会将它用于登录和登录页面,所以我想我可以在主视图中检查正在执行的控制器方法,并根据它是否呈现包装 div。

所以它看起来像这样:

<% if current_page? controller: :registrations, action: :new %>
    <%= yield %>
<% else %>
    <div class="container">
        <div class="col-sm-12">
            <%= yield %>
        </div>
    </div>
<% end %>

我在注册页面上测试了它,它成功了!

但是,当浏览到不同的页面时,比如登录时,会出现此错误:

No route matches {:action=>"new", :controller=>"devise/registrations"}

错误的轮廓线是<% if current_page? controller: :registrations, action: :new %>

这对我来说没有意义。怎么了?我怎样才能实现我想要做的事情?

编辑 路线:

        new_user_session GET    /users/sign_in(.:format)                      devise/sessions#new
            user_session POST   /users/sign_in(.:format)                      devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                     devise/sessions#destroy
           user_password POST   /users/password(.:format)                     devise/passwords#create
       new_user_password GET    /users/password/new(.:format)                 devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)                devise/passwords#edit
                         PATCH  /users/password(.:format)                     devise/passwords#update
                         PUT    /users/password(.:format)                     devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                       registrations#cancel
       user_registration POST   /users(.:format)                              registrations#create
   new_user_registration GET    /users/sign_up(.:format)                      registrations#new
  edit_user_registration GET    /users/edit(.:format)                         registrations#edit
                         PATCH  /users(.:format)                              registrations#update
                         PUT    /users(.:format)                              registrations#update
                         DELETE /users(.:format)                              registrations#destroy

试试这个

<% if user_signed_in? %>
  <div class="container">
    <div class="col-sm-12">
        <%= yield %>
    </div>
  </div>
<%else%>
  <%= yield %>
<%end%>

我有一个类似于您描述的网络应用程序设置。登录页面有完整的背景图片。您需要根据自己的目的对其进行调整,但这就是我们的想法。

helpers/application_helper.rb:

  # The home page uses a different container than all other pages
  def context_background
    if current_page?(login_url) 
       @container = "login-container"
    else
       @container = "container"
    end
  end

views/layouts/application.html.erb

   <div class="<%= context_background %>">
      <%= yield %>
      <%= render 'layouts/footer' %>
    </div>

当然要为背景图片 div 设置 CSS。如果您需要这部分的帮助,请告诉我。