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。如果您需要这部分的帮助,请告诉我。
我调用 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。如果您需要这部分的帮助,请告诉我。