Fazer Trilhos procurar .móveis arquivos no subdiretório?
-
20-12-2019 - |
Pergunta
Eu estou usando o celular fu gem para fazer algum user-agent de detecção, para que eu possa servir tanto .ou html .extensão móvel modelos dependendo do cliente,
Agora, essa parte funciona muito bem, mas eu não gosto que ver as pastas se tornar um pouco confuso com duas vezes os arquivos, ou seja,.
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
o que eu gostaria de ter, em vez disso:
app/views/profiles/html/show.html.haml
app/views/profiles/html/edit.html.haml
E
app/views/profiles/mobile/show.mobile.haml
app/views/profiles/mobile/edit.mobile.haml
E tem o Rails automaticamente olhar para o correto pasta/diretório para arquivos dependendo do Pedido.Isso é possível fazer?
Talvez isso é uma coisa muito fácil de fazer, deixe-me saber se este é um comportamento que vem de fora da caixa..
Obrigado
Solução
Trilhos 4.1 tem um novo recurso interno chamado ActionPack Variantes, que detecta o agente de usuário (como o móvel fu gem).
Basicamente, você pode adicionar, por exemplo, este em sua 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 você tenha uma ProfilesController.Agora você pode fazer isso:
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
De volta à sua pergunta:Se você quer procurar por arquivos em uma pasta diferente do diretório/, você pode fazer isso:
format.html.phone { render 'mobile/index' } # /app/views/mobile/index.html+phone.erb
Há também um bom tutorial o que mostra como usá-lo.