with tutorial framework español djangoproject desde con cero applications ruby-on-rails layout

ruby-on-rails - framework - tutorial django



rails 3, ¿cómo agregar una vista que no usa el mismo diseño que el resto de la aplicación? (5)

Bueno, si se trata de una vista diferente para los dispositivos móviles, pero todas las versiones de escritorio son las mismas, entonces podría usar JQtouch.

http://railscasts.com/episodes/199-mobile-devices

# config/initializers/mime_types.rb Mime::Type.register_alias "text/html", :mobile # application_controller.rb before_filter :prepare_for_mobile private def mobile_device? if session[:mobile_param] session[:mobile_param] == "1" else request.user_agent =~ /Mobile|webOS/ end end helper_method :mobile_device? def prepare_for_mobile session[:mobile_param] = params[:mobile] if params[:mobile] request.format = :mobile if mobile_device? end

El código anterior se toma del ejemplo de Railscasts.

No pude encontrar ningún documento o ejemplos sobre cómo estructurar mi aplicación para permitir que diferentes vistas en el mismo controlador utilicen diseños y hojas de estilo completamente diferentes.

Nuestra aplicación fue scaffolded y luego usamos nifty-generators para generar vistas, luego añadimos el diseño para la autenticación. Tenemos vistas y controladores para dos modelos: widgets y compañías.

Actualmente tengo un diseño único: layouts / application.html.haml, no veo que se haga referencia a él en ninguna parte, así que supongo (que es un novato de Rails) que siempre se usa al nombrar las convenciones.

Ahora necesito agregar un par de vistas (para navegadores móviles) que tienen una hoja de estilo y un diseño diferente (por ejemplo, enlaces de inicio de sesión / cierre de sesión en la esquina superior derecha), dentro de los mismos controladores.

¿Cómo se puede hacer eso?


Estoy seguro de que hay muchas respuestas a esto, pero aquí hay otra donde puedes usar diferentes diseños por controlador o por acción.

class ListingsController < ApplicationController # every action will use the layout template app/views/layouts/listing_single.html.erb layout ''listing_single'' # the ''list'' action will use the layout set in the ''alternative_layout'' method # you can also add multiple actions to use a different layout,just do like layout :alternative_layout, only: [:list,:another_action] layout :alternative_layout, :only => :list def show end def list end private def alternative_layout if current_user.is_super_admin? #if current use is super admin then use the layout found in app/views/layouts/admin.html.erb otherwise use the layout template in app/views/layouts/listing_list.html.erb ''admin'' else ''listing_list'' end end end


Sí, puede usar diferentes diseños y hojas de estilo dentro de los mismos controladores.

La guía de rieles en los diseños es un buen lugar para comenzar. Mire la Sección 3 - Diseños de Estructuración

Hay varias formas de utilizar un diseño diferente, pero una de las más sencillas es simplemente agregar un archivo con el mismo nombre que su controlador en la carpeta de layouts/ . Entonces, si su controlador es PostsController entonces agregar layouts/post.html.haml provocaría que los rieles usen ese diseño. Si no se encuentra dicho diseño, y no se especifican otros diseños, los rieles usarán el predeterminado de layouts/application.html.haml


Si no quiere ir demasiado complejo, simplemente puede hacer esto:

layout ''layout_one'' def new @user= User.new render layout: ''landing_page'' end

esto lo hara.


De forma predeterminada, layouts/application.html.haml ( .erb si no está utilizando haml).

De hecho, el archivo de diseño se puede configurar por controlador o por acción, en lugar de por vista, por carpeta de vista.

Hay algunos casos:

Para cambiar el archivo de diseño predeterminado para todos los controladores (es decir, use another.html.haml lugar de application.html.haml )

class ApplicationController < ActionController::Base layout "another" # another way layout :another_by_method private def another_by_method if current_user.nil? "normal_layout" else "member_layout" end end end

Para cambiar todas las acciones en un controlador determinado para usar otro archivo de diseño

class SessionsController < ActionController::Base layout "sessions_layout" # similar to the case in application controller, you could assign a method instead end

Para cambiar una acción para usar otro archivo de diseño

def my_action if current_user.nil? render :layout => "normal_layout" else render :action => "could_like_this", :layout => "member_layout" end end