Я создаю мобильный сайт рядом с нашим обычным HTML-сайтом.Использование рельсов 3.1.Мобильный сайт доступен в поддомене m.site.com.
Я определил мобильный формат (Mime :: Type.register_alias "text / html",: mobile).
В ApplicationController у меня есть«before_filter: mobile_site_before_filter», который распознает мобильный сайт и устанавливает формат в соответствии с ним.
def mobile_site_before_filter
if request.subdomains.first == 'm'
original_format = request.format
request.format = :mobile
@mobile_site = true
request.formats.push(original_format)
end
end
В макетах у меня есть 'main.html.erb' и 'main.mobile.erb'.Так что с мобильными сайтами используется мобильный макет.
Теперь он вроде работает нормально.
В UserController у меня есть действие index, которое автоматически выбирает index.html.erb или index.mobile.erb.Никакого дополнительного кодирования в верхней части мобильного просмотра не требуется.Успех.
Но у меня есть много других представлений, в которых тот же шаблон можно использовать для размещения внутри мобильных макетов, но с небольшими изменениями.
Например, в MessagesController такое же представление было бы почти нормально для мобильных
In index.html.erb
Normal user info, common for mobile and html
<%= render(:partial => 'messages') %>
Рендеринг messages.html.erb, нет необходимости в messages.mobile.erb.мобильное представление может быть сделано с помощью css
<%# By default self.formats = [:html] because this is .html.erb partial, even in mobile site %>
<%= self.formats = [:mobile, :html] if @mobile_site # How to get rid of this? %>
<%= render(:partial => 'vote_form') %>
<!-- rest of page ... -->
Теперь я хочу отрисовать voice_form. [mobile | html] .erb в зависимости от сайта ...
Теперь index.html.erbчастичное было бы хорошо использовать с мобильным телефоном, если бы я мог просто выбрать один из вариантов voice_form.html.erb или voice_form.mobile.erb.Я могу выбрать использование части телефона с использованием "self.formats = [: mobile,: html] if @mobile_site" в начале index.html.erb.Но глупо писать это в начале всех шаблонов.
Таким образом, вопрос:
- Откуда появляются представления self.formats (что устанавливает его изначально) и как я могу установить этоэто всегда [: mobile,: html] внутри мобильного сайта?Почему это не то же самое, что я установил в контроллере before_filter?Можно ли как-то установить его в контроллере?
(незначительные вопросы о бонусе)
Что-то не так в этом подходе?Использование в основном тех же html-представлений, а в некоторых конкретных случаях вместо этого - использование представлений mobile.erb.Почему это не работает по умолчанию в рельсах?
Есть ли другие способы выбора рендеринга: мобильные представления, если они найдены с откатом к обычному представлению HTML?Даже через партиалы, так что html.erb-view пытается использовать _partial.mobile.erb partials.