Pregunta

Estoy usando la gema móvil FU para realizar una detección de un agente de usuario, para que pueda servir las plantillas de extensión .html o .mobile dependiendo del cliente,

Ahora, esta parte funciona realmente bien, pero no me gusta que las carpetas de la vista se apagan un poco con el doble de los archivos, es decir.

app/views/profiles/show.mobile.haml

app/views/profiles/show.html.haml

app/views/profiles/edit.mobile.haml

app/views/profiles/edit.html.haml

etc, etc

lo que me gustaría tener en su lugar es:

app/views/profiles/html/show.html.haml

app/views/profiles/html/edit.html.haml

y

app/views/profiles/mobile/show.mobile.haml

app/views/profiles/mobile/edit.mobile.haml

y tienen rieles automáticamente mira a la carpeta / directorio correcta para los archivos dependiendo de la solicitud. ¿Es esto posible hacer?

Tal vez esto es algo realmente fácil de hacer, avíseme si este es un comportamiento que sale de la caja.

Gracias

¿Fue útil?

Solución

Rails 4.1 tiene una nueva característica incorporada llamada Variantes de acción de acción , que detecta el agente de usuario (como la gema móvil del móvil).

Básicamente, puede agregar esto, por ejemplo, en su ApplicationController:

before_action :detect_device_format

private

def detect_device_format
  case request.user_agent
  when /iPad/i
    request.variant = :tablet
  when /iPhone/i
    request.variant = :phone
  when /Android/i && /mobile/i
    request.variant = :phone
  when /Android/i
    request.variant = :tablet
  when /Windows Phone/i
    request.variant = :phone
  end
end

Digamos que tienes un profileController.Ahora puedes hacer esto:

class ProfilesController < ApplicationController
  def index
    respond_to do |format|
      format.html          # /app/views/profiles/index.html.erb
      format.html.phone    # /app/views/profiles/index.html+phone.erb
      format.html.tablet   # /app/views/profiles/index.html+tablet.erb
    end
  end
end

Volver a su pregunta: si desea buscar archivos en una carpeta / directorio diferente, puede hacerlo:

format.html.phone { render 'mobile/index' }   # /app/views/mobile/index.html+phone.erb

También hay una buen tutorial que muestraCómo usarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top