Сайт Rails 3.0 для мобильных устройств

98
6

Мне было интересно, как я собираюсь создать мобильную версию приложения Rails 3.0.


Я видел это сообщение: Мобильная версия просмотров для Ruby on Rails


Но я запутался в методе response_to. Как метод знает, какой формат отображать?


Можно ли создать метод в контроллере приложения для отображения мобильного макета, а затем для каждого представления использовать метод response_to?


Спасибо,


Брайан

спросил(а) 2021-01-25T12:01:28+03:00 4 месяца, 4 недели назад
1
Решение
108

Райан Бэйтс сделал отличный учебник

http://railscasts.com/episodes/199-mobile-devices

ответил(а) 2021-01-25T12:01:28+03:00 4 месяца, 4 недели назад
77

Метод respond_to будет выбирать в соответствии с типом текущего запроса mime.


Это работает из коробки для общих типов mime, но вам нужно будет сообщить вашему приложению о своих пользовательских. В вашем контроллере приложений вы хотите определить метод, который будет корректировать формат внутренней рецензии Rails запроса. Затем вызовите этот метод как фильтр before. Вот пример:


class ApplicationController < ActionController::Base
before_filter :adjust_for_mobile

def adjust_for_mobile
request.format = :mobile if mobile_request
end

# You'll also need to define the mobile_request method
# using whatever strategy you want to tell if a request
# is from a mobile client or not
def mobile_request
true
end
end


Убедитесь, что вы определили этот новый тип в config/initializers/mime_types.rb:

Mime::Type.register "text/html", :mobile

Затем в ваших контроллерах вы сможете использовать "мобильный" формат:


class FoosController < ApplicationController
def index
@foos = Foo.all

respond_to do |format|
format.html # index.html.erb
format.mobile # index.mobile.erb
end
end
end


Это, конечно, выглядит элегантно, но практически, я нахожу, что я редко использую его для мобильных сайтов. Мобильные сайты, над которыми я работал, как правило, сильно отличаются от "полных" сайтов. В этих случаях имеет смысл просто определить еще одну группу контроллеров под "мобильным" пространством имен.

ответил(а) 2021-01-25T12:01:28+03:00 4 месяца, 4 недели назад
64

Посмотрите Rails Mobile


Я разработал этот плагин некоторое время назад. Идея этого плагина состоит в том, что вы можете перенаправлять на разные контроллеры или представления на основе возможностей вашего мобильного устройства через конфигурационный файл маршрутизатора.


В конце routing.rb добавьте следующие строки:


MobileDispatch::Categories.add do

def mobile_classifier(device)
"_mobile"
end
end


Эти строки определяют новую подстроку для всех мобильных устройств, которые будут храниться в переменной $для каждого запроса в файле rouging.rb.


Таким образом, вы можете играть с правилами маршрутизации. Например, эта строка в routing.rb:


match '/photo/: id',: to = > "photo # index $",: classifier = > : mobile_classifier


для обычного пользователя будет интерпретироваться как:


match '/photo/: id',: to = > "photo # index",: classifier = > : mobile_classifier


а для мобильного пользователя:


match '/photo/: id',: to = > "photo # index_mobile",: classifier = > : mobile_classifier


Сила здесь в методе mobile_classifier (device), где вы можете вернуть разную классификацию на основе объекта устройства.


так что скажем, мы модифицируем метод для возврата "_iphone" для всех iphone-устройств и "_android" для всех мобильных телефонов Android, тогда указанная линия маршрутизации будет интерпретироваться как:


match '/photo/: id',: to = > "photo # index_iphone",: classifier = > : mobile_classifier


match '/photo/: id',: to = > "photo # index_android",: classifier = > : mobile_classifier


Если вы добавите $в конец части обзора каждого маршрута (аналогично тому, что мы здесь сделали), вы получите разные методы в вашем контроллере для каждой категории устройств и разных имен имен для каждого метода (index_iphone.htm. erb и index_android.ht.erb) Таким образом, у вас есть отдельные представления/уровни для каждой категории устройств, которые вы определили в вашем методе mobile_classifier.

ответил(а) 2021-01-25T12:01:28+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема