Hacer que los rieles busque archivos .mobile en subdirectorio?
-
20-12-2019 - |
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
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.