Заставить Rails искать файлы.mobile в подкаталоге?
Я использую мобильный fu gem для обнаружения некоторых пользовательских агентов, чтобы я мог обслуживать шаблоны расширений.html или.mobile в зависимости от клиента,
Теперь эта часть работает очень хорошо, но мне не нравится, что папки с представлениями становятся немного загроможденными вдвое, т.е.
app/views/profiles/show.mobile.haml
app/views/profiles/show.html.haml
app/views/profiles/edit.mobile.haml
app/views/profiles/edit.html.haml
и т. д.
то, что я хотел бы иметь вместо этого:
app/views/profiles/html/show.html.haml
app/views/profiles/html/edit.html.haml
А также
app/views/profiles/mobile/show.mobile.haml
app/views/profiles/mobile/edit.mobile.haml
И пусть Rails автоматически ищет правильную папку / каталог для файлов в зависимости от запроса.Возможно ли это сделать?
Может быть, это действительно легко сделать, дайте мне знать, если это поведение, которое выходит из коробки...
Спасибо
1 ответ
В Rails 4.1 появилась новая встроенная функция под названием ActionPack Variants, которая обнаруживает пользовательский агент (например, мобильный фем-джем).
В принципе, вы можете добавить это, например, в свой 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
Допустим, у вас есть ProfilesController. Теперь вы можете сделать это:
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
Вернемся к вашему вопросу: если вы хотите искать файлы в другой папке / каталоге, вы можете сделать это:
format.html.phone { render 'mobile/index' } # /app/views/mobile/index.html+phone.erb
Существует также хороший учебник, который показывает, как его использовать.