ruby on rails 3 - rails - Cómo hacer parcial en todo excepto una determinada acción.
render js rails (3)
Tengo un _header.html.erb parcial que es donde coloco mi barra de navegación
en mi página de inicio no quiero mostrar la barra de navegación.
este es el body
de application.html.erb
<body>
<%= render ''layouts/header'' %>
<div id="container">
<%= yield %>
</div>
</body>
¿Cómo lo represento en cada acción, excepto en acciones específicas en controladores específicos?
Puede poner esa lógica en sus hojas de estilo, en su controlador o en sus vistas (esta última, solo para controladores completos).
Hojas de estilo
Si desea agregar la lógica en sus hojas de estilo, primero agregue a su etiqueta de cuerpo las siguientes clases:
<body class="<%= "#{controller.controller_name} #{controller.action_name}" %>">
Luego, en tu css, agrega algo como esto:
body.controller.action .navbar {
display: none;
}
Controlador
Para agregar esta lógica a su controlador, agregue un filtro anterior a su controlador de aplicación:
class ApplicationController < ActionController::Base
before_filter :show_navbar
protected
def show_navbar
@show_navbar = true
end
end
Luego, si no desea mostrar la barra de navegación en CarsController, haga lo siguiente:
class CarsController < ApplicationController
skip_before_filter :show_navbar, only: [list, of, actions]
end
donde [list, of, actions]
son las acciones en las que no desea mostrar la barra de navegación.
Finalmente, cambie su diseño para verse así:
<% if @show_navbar -%>
<%= render ''layouts/header'' %>
<% end -%
Puntos de vista
Si desea deshabilitar el encabezado para los controladores completos, primero mueva el encabezado a app/views/application/
y cambie su render a:
<%= render partial: ''header'' %>
Finalmente, en esos controladores sin barra de navegación, agregue un _header.html.erb
vacío a app/views/controller_name
.
Para que esta opción funcione, necesitas al menos Rails 3.1
Reemplace su render con esto:
<%= render ''layouts/header'' unless @disable_nav %>
Luego, simplemente puede establecer disable_nav
en verdadero en cualquier acción del controlador que desee:
def landing_page
@disable_nav = true
end
Como un before_filter
, que yo before_filter
por encima de lo anterior:
application_controller.rb
def disable_nav
@disable_nav = true
end
my_controller
before_filter :disable_nav, only: [:landing_page]
Yo establecería un diseño diferente para esas acciones específicas en controladores específicos.