Я кодирую небольшое веб-приложение, используя http://padrinorb.org (haml+lesscss) как для мобильных устройств (Android /iPhone/iPad) и пользователей настольных компьютеров, и поэтому я хочу отображать немного разные html/css для разных устройств.
Для определения различных клиентов я использую мобильное обнаружение стойки, которое до сих пор отлично работает.
Чтобы макет стал layouts/application.mobile, я использую эти помощники/обертки для render
def preferred_extension
if request.xhr?
"js"
elsif env["X_MOBILE_DEVICE"]
"mobile"
else
"html"
end
end
def preferred_layout
if preferred_extension.eql? "html"
"application"
else
"application.#{preferred_extension}"
end
end
def render_preferred filename
filename = "#{filename}.#{preferred_extension}"
if request.xhr?
layout_file = false
else
layout_file = "layouts/#{preferred_layout}".to_sym
end
render filename, :layout => layout_file
end
Однако это не помогает мне при работе с партиалами... и мне кажется, что у кого-то должно быть лучшее решение для этого, чем просто обертывание рендеринга и партиала в помощнике.
Чего я хочу, так это не засорять мои контроллеры и представления странным кодом только для того, чтобы отобразить правильный частичный файл с правильным макетом.
Я хотел бы, чтобы обнаружение рендеринга определяло, какой файл использовать, и возвращалось к файлу name.haml, если имя файла отсутствует.#{preferred_extension}.haml.
В рельсах есть такая штука типа пантомимы, которую я использовал в предыдущем проекте, но я не нашел ничего подобного для падрино (синатра)