设计视图的自定义

时间:2014-01-18 20:35:30

标签: ruby-on-rails ruby devise routes

有没有办法将设计用户路由到不输出页眉和页脚的登录和注册屏幕?因为我的application.html.erb

正在产生一切

继承我当前的application.html.erb代码

 <body>
   <div id="wrap">
    <%= render 'layouts/header' %>
      <%= yield %>
    <div id="push"></div>
   </div>
 <%= render 'layouts/footer' %>
 </body>

3 个答案:

答案 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