有没有办法将设计用户路由到不输出页眉和页脚的登录和注册屏幕?因为我的application.html.erb
正在产生一切继承我当前的application.html.erb代码
<body>
<div id="wrap">
<%= render 'layouts/header' %>
<%= yield %>
<div id="push"></div>
</div>
<%= render 'layouts/footer' %>
</body>
答案 0 :(得分:1)
控制器支持:only和:除了布局选项,因此您可以限制控制器中的访问权限,如下所示:
class RandomController < ApplicationController
layout 'application', :except => [:signup, :signin]
def signin
// some code
end
def signup
// some code
end
end
我建议你在渲染视图中查看官方RoR网站部分(this link)。
更新2
使用config / application.rb中的回调设置特定Devise控制器的布局。 (所以这段代码属于/config/application.rb文件)
这允许在每个控制器的基础上指定布局。例如,如果您想要为Devise :: HomeController视图指定特定布局:
config.to_prepare do
Devise::HomeController.layout "layout_for_home_controller"
end
使用四种不同布局的更深入的示例,每个控制器一个:
config.to_prepare do
Devise::HomeController.layout "layout1"
Devise::UsersController.layout "layout2"
Devise::ArticlesController.layout "layout3"
Devise::TutorialsController.layout "layout4"
end
答案 1 :(得分:0)
不是最漂亮的解决方案,但这是一种做法。
<body>
<div id="wrap">
<%= render 'layouts/header' unless params[:controller] == "devise/sessions" or "devise/registrations" and params[:action] == "new" %>
<%= yield %>
<div id="push"></div>
</div>
<%= render 'layouts/footer' unless params[:controller] == "devise/sessions" or "devise/registrations" and params[:action] == "new" %>
</body>
修改强>
application_helper.rb
def hidden_header_footer
params[:controller] == "devise/sessions" or "devise/registrations" and params[:action] == "new"
end
application.html.erb
<%= render 'layouts/footer' unless hidden_header_footer %>
<%= render 'layouts/header' unless hidden_header_footer %>
答案 2 :(得分:0)
如果您将Devise与标准版面一起使用,则会将其渲染到主视图中:&lt;%= yield%&gt ;.
因此,您可以在以下位置更改application.html.erb:
<body>
<div id="wrap">
<% if user_signed_in? %>
<%= render 'layouts/header' %>
<% end %>
<%= yield %>
<% if user_signed_in? %>
<%= render 'layouts/footer' %>
<% end %>
</div>
</body>
你的application_controller.rb在:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
#before_action :authenticate_user!, except: [:index, :home]
before_action :authenticate_user!
end