Rails 3.0 Мобильный сайт - PullRequest
       1

Rails 3.0 Мобильный сайт

4 голосов
/ 07 октября 2011

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

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

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

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

Спасибо,

Брайан

Ответы [ 3 ]

5 голосов
/ 07 октября 2011

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

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

2 голосов
/ 07 октября 2011

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

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

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

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

1 голос
/ 07 октября 2011

Взгляните на 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 (устройство), где вы можете вернуть различную классификацию на основе объекта устройства.

Допустим, мы изменили метод для возврата «_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 and index_android.ht.erb) Таким образом, у вас есть отдельные представления / слои для каждой категории устройств, которую вы определили в методе mobile_classifier.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...