【问题标题】:how do I link a layout to a view page on Ruby on Rails如何将布局链接到 Ruby on Rails 上的视图页面
【发布时间】:2017-08-22 12:17:58
【问题描述】:

我是 Ruby on Rails 的新手,这是我第一次使用 MVC 结构,我需要一些帮助,如何将布局链接到视图页面?我正在浏览一些教程,但它看起来很复杂,我很困惑。

这是我的视图代码:

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

我的视图中出现了一个布局(标题),我想删除该布局,但我看不到控制器的哪个位置可以这样做。这是我的视图中出现的布局:

 <!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>

这里是主控制器(应用控制器):

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

【问题讨论】:

  • 请用您的代码片段澄清您的问题:模型、视图、控制器、路由和用途。
  • 你好@cnnr 我编辑了问题并添加了一些代码。

标签: ruby-on-rails


【解决方案1】:

有很多方法可以使用布局。如果你想为一个给定的动作调用一个特定的布局,你应该在你的控制器中做,而不是在你的视图中。如果你需要在视图中调用,给一个局部布局,那么语法是不同的,你先调用局部然后布局。

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

如果您只想让您的 2 列视图在特定控制器中呈现,则在任何方法定义调用之前的控制器顶部,在类名下

class ArticlesController < ApplicationController
  layout "two_column_landing"
end

如果您只想为控制器中的特定操作调用此布局,您可以在方法 render 中执行此操作

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

您可以参考这个问题here了解更多详情。

如果您想从控制器中的所有操作中删除布局,请在类名后添加layout false

class ArticlesController < ApplicationController
  layout false
end

或者如果你也可以为每个动作指定

def login
  ...
  render layout: false
end

Link to documentation

【讨论】:

  • 您好@Roshan 感谢您的回答,但我有一个特定的布局出现在我想要删除的视图上,但我无法在控制器上找到链接。代码在我的编辑问题中
  • @CapitanDuke 我已经用layout false 编辑了答案,很可能你需要它来完全删除布局。
  • 谢谢,但我不知道控制器中的类在哪里,或者链接到我的视图的布局在哪里。我看不到这个布局在哪里链接到我的视图,它应该在控制器中,但我没有看到它。
  • @CapitanDuke 你提到了标题,所以这行&lt;%= render 'layouts/cookies' %&gt; 可能需要删除。
  • 我已经尝试过了,但不是一个(cookies = cookie 的文本):(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 2010-12-21
  • 1970-01-01
  • 2022-01-15
  • 2015-12-26
  • 1970-01-01
相关资源
最近更新 更多