Я использую этот код (взятый из здесь) в ApplicationController для обнаружения запросов iPhone, iPod Touch и iPad:
before_filter :detect_mobile_request, :detect_tablet_request
protected
def detect_mobile_request
request.format = :mobile if mobile_request?
end
def mobile_request?
#request.subdomains.first == 'm'
request.user_agent =~ /iPhone/ || request.user_agent =~ /iPod/
end
def detect_tablet_request
request.format = :tablet if tablet_request?
end
def tablet_request?
#request.subdomains.first == 't'
request.user_agent =~ /iPad/
end
Это позволяет мне иметь шаблоны, такие как show.html.erb, show.mobile.erb и show.tablet.erb, что здорово, но есть проблема: Кажется, я должен определить каждый шаблон для каждого типа mime. Например, запрос действия "показать" с iPhone без определения show.mobile.erb выдает ошибку, даже если указан show.html.erb. Если отсутствует шаблон мобильного или планшета, я хотел бы просто вернуться к html файлу. Это не кажется слишком завышенным, поскольку "mobile" определяется как псевдоним "text/html" в файле mime_types.rb.
Итак, несколько вопросов:
- Я делаю это неправильно? Или, есть ли лучший способ сделать это?
- Если нет, могу ли я получить типы мобильных и планшетов-мимов на html, если файл мобильного или планшета отсутствует?
Если это имеет значение, я использую Rails 3.0.1. Спасибо заранее за любые указатели.
EDIT: Что-то я забыл упомянуть: в конечном итоге я перейду к отдельным поддоменам (как вы можете видеть в моем примере), поэтому загрузка шаблона действительно должна произойти автоматически, независимо от того, из которых before_filter
.