简体   繁体   中英

how do I link a layout to a view page on Ruby on Rails

I'm new on Ruby on Rails, it's my first time with MVC structure, and I need some help, how do I link a layout to a view page? I was looking through some tutorial but it looks so complicated and I'm so confused.

here is my view code:

<div class="container" id="login">
  <div class="row">
    <div class="span3"></div>
    <div class="span9">
      <% resource.remember_me = true %>
      <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), html:{role:"form", class:"form-horizontal" ,id:"form-login"}) do |f| %>
        <div style="text-align: center; margin: 20px 0 20px 60px; width: 480px">
          <%=image_tag 'logo_ras.gif' %>
        </div>

        <%= devise_error_messages! %>

        <div class="control-group">
          <%= f.label :email, {class:"control-label"} %>
          <div class="controls">
            <%= f.email_field :email, :autofocus => true %>
          </div>
        </div>


        <div class="control-group">
          <%= f.label :password, {class:"control-label"} %>
          <div class="controls">
            <%= f.password_field :password %>
          </div>
          <%=link_to "¿Olvidaste tu password?", new_user_password_path, {class: "controls"} %>
        </div>

        <%- if devise_mapping.rememberable? -%>
          <div class="check-box">
            <label><div class="controls"><%= f.check_box :remember_me %> No cerrar sesion </div></label>
          </div>
        <% end -%>

        <div class="controls"><%= f.submit "Entrar", class:"btn btn-success" %></div>

        <div style="text-align: center; margin: 20px 0 0 60px; width: 480px">
            <%=link_to image_tag('banner.png'), "http://www.canalcolon.com", :target => "_blank" %>

            <div>
              Realización: <a href="http://www.gocnetworking.com" target="_blank">Gestió, Organització i Comunicació,   S.A.</a><br/> 
              <%=link_to "Aviso legal", legal_path %>
            </div>


        </div>

      <% end %>

    </div>
  </div>  
</div>

There is a layout(header) appearing in my view and I want to remove that layout, but I dont see where in the controllers I can do that. Here is my layout that is appearing in my view:

 <!DOCTYPE html>
<html>
<head>
  <title>NK-RAS Personalizar es futuro</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>

  <%= favicon_link_tag "favicon.png" %>

  <%= favicon_link_tag "favicon_57_57.png", rel: "apple-touch-icon", sizes: "57x57" %>
  <%= favicon_link_tag "favicon_72_72.png", rel: "apple-touch-icon", sizes: "72x72" %>
  <%= favicon_link_tag "favicon_114_114.png", rel: "apple-touch-icon", sizes: "114x114" %>

  <%= csrf_meta_tags %>

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <%= render 'layouts/cookies' %>

  <%if Rails.env=='production'%>
    <script type="text/javascript">
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

      ga('create', 'UA-46656081-1', ('https:' == document.location.protocol ? 'https://' : 'http://')+'www.ras-amgen.com');
      ga('send', 'pageview');

    </script>
  <%end%>

  <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
  <![endif]-->
</head>

<body>
  <div class="navbar navbar-fixed-top navbar-default" role="navigation">
    <div class="navbar-inner">
        <!--BUTTON BAR RESPONSIVE-->  
        <% if user_signed_in? and current_user.hospitals.count > 0 %>
          <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
        <% end %>

        <!--APP NAME-->
          <!--a class="brand" href="#">DeterminaRAS</a-->
          <%=link_to(root_path) do%> 
            <%=image_tag("logo_ras_interior.gif",class:"brand")%>
          <%end%>


          <% if user_signed_in? and current_user.hospitals.count > 0 %>
          <!--MENU OPTIONS-->
            <div class="collapse nav-collapse">
            <!-- <div class="nav navbar-nav navbar-left"> -->

              <ul class="nav navbar-left">

                <% if mobile_request? %>

                  <li><%= link_to("Determinaciones",determinaciones_path)%> <%#if can?(:index_det, Determinacion.new(medico_id: current_user.medico_id))%></li>
                  <li><%= link_to "Estadísticas",estadisticas_index_path %></li>

                  <li><%= link_to "Solicitudes",solicitudes_path if can?(:index_sol,Solicitud)%></li>

                  <% if can?(:crud, Hospital) && can?(:crud, Medico) %>
                    <li><%= link_to "Hospitales/médicos",solicitantes_hospitals_path %></li>
                  <% end %>

                <% else %>

                  <li><%= link_to "Solicitudes",solicitudes_path if can?(:index_sol,Solicitud)%></li>

                  <% if can?(:crud, Hospital) && can?(:crud, Medico) %>
                    <li><%= link_to "Hospitales/médicos",solicitantes_hospitals_path %></li>
                  <%end%>                                          
                  <li><%= link_to("Determinaciones",determinaciones_path) %> <%#if can?(:index_det, Determinacion.new(medico_id: current_user.medico_id)) %> </li> 
                  <li><%= link_to "Estadísticas",estadisticas_index_path %></li>

                <% end %>

              </ul>
              <ul class="nav navbar-right pull-right">                 
                <li><%= link_to "Ayuda","/ayuda/menu.htm" %></li>
                <li><%=link_to "#{current_user.whoami?}", perfil_path%></span></li> 
                <li><%= link_to "Salir", destroy_user_session_path, method: :delete %></li>                
              </ul>
            </div>
          <% end %>
      </div>        
    </div>
  </div>  

<!--   <div id="container">   
    <% flash.each do |name, msg| %>
      <%= content_tag :div, msg, id: "flash_#{name}" %>
    <% end %>

  </div>
 -->  
  <div class="container-fluid" id="main-container">
    <% flash.each do |name, msg| %>
      <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
        <a class="close" data-dismiss="alert">x</a>
        <%= msg  %>
      </div>
    <% end %>
    <%if user_signed_in? && mobile_request? %>
      <div>
        <%= yield %>        
      </div>
    <% elsif user_signed_in? %>
      <div id="signed_in">
        <%= yield %>        
      </div>
    <% else %>
      <%= yield %>        
    <%end%>
  </div>

<script type="text/javascript" src="https://eu-aa.appature.com/aa/12582914/script"></script>
<script type="text/javascript">aatracker.track();</script>

</body>
</html>

And here is the main controller (application controller):

class ApplicationController < ActionController::Base
  protect_from_forgery
  check_authorization :unless => :devise_controller?
  before_filter :audit
  helper_method :mobile_request?

    def audit
        audit = Audit.new
        audit.controller = params[:controller]
        audit.action = params[:action]
        audit.url = self.env["REQUEST_URI"]
        audit.ip = self.env["REMOTE_ADDR"]
        audit.user_id = current_user.id if current_user
        audit.save!
    end

  DEFAULT_MOBILE_AGENTS = %w(
    palm
    blackberry
    nokia
    phone
    midp
    mobi
    symbian
    chtml
    ericsson
    minimo
    audiovox
    motorola
    samsung
    telit
    upg1
    windows\ ce
    ucweb
    astel
    plucker
    x320
    x240
    j2me
    sgh
    portable
    sprint
    docomo
    kddi
    softbank
    android
    mmp
    pdxgw
    netfront
    xiino
    vodafone
    portalmmm
    sagem
    mot-
    sie-
    ipod
    up.b
    webos
    amoi
    novarra
    cdm
    alcatel
    pocket
    ipad
    iphone
    mobileexplorer
    mobile
    maemo
    fennec
    silk
    playbook
  )

  def mobile_agents
    @mobile_agents ||= Regexp.union(DEFAULT_MOBILE_AGENTS)
  end

  def mobile_request?
    (!(request.user_agent.to_s.downcase =~ mobile_agents).nil?) ||
    (params[:mobile])
  end

end

There are many ways layout can be used. If you want to call a specific layout for a given action, you should do that in your controller, not in your view. If you need to call in a view, to give a layout for a partial, then the syntax is different, you call the partial first and then the layout.

<%= render partial: "comments", layout: "two_column_landing" %>

If you just want your 2 column view to render in a particular controller then at the top of the controller before any method definitions call, under the class name

class ArticlesController < ApplicationController
  layout "two_column_landing"
end

If you want to only call this layout for a specific action in the controller you can do it in the method render

def index
  @people = Person.all
  render layout: "multi-column"
end 

You may refer to this question here for more details.

If you want to remove layout from all action in a controller, add layout false after the class name.

class ArticlesController < ApplicationController
  layout false
end

or if you can also specify for each action

def login
  ...
  render layout: false
end

Link to documentation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM