Вопрос

Я использую драгоценность на мобильном Фу, чтобы выполнить некоторые обнаружение пользовательского агента, чтобы я мог служить либо шаблоны расширения .html или .mobile в зависимости от клиента,

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

app/views/profiles/show.mobile.haml

app/views/profiles/show.html.haml

app/views/profiles/edit.mobile.haml

app/views/profiles/edit.html.haml

etc и т. д.

Что я хотел бы иметь вместо этого:

app/views/profiles/html/show.html.haml

app/views/profiles/html/edit.html.haml

и

app/views/profiles/mobile/show.mobile.haml

app/views/profiles/mobile/edit.mobile.haml

И у Rails автоматически смотрит в правильную папку / каталог для файлов в зависимости от запроса. это возможно делать?

Может быть, это что-то действительно легко сделать, дайте мне знать, если это поведение, которое выходит из коробки ..

Спасибо

Это было полезно?

Решение

Rails 4.1 имеет новую встроенную функцию, называемую Варианты Actionpack , который обнаруживает пользовательский агент (как мобильный FU GEM).

В основном вы можете добавить это, например, в вашем ApplicationController:

before_action :detect_device_format

private

def detect_device_format
  case request.user_agent
  when /iPad/i
    request.variant = :tablet
  when /iPhone/i
    request.variant = :phone
  when /Android/i && /mobile/i
    request.variant = :phone
  when /Android/i
    request.variant = :tablet
  when /Windows Phone/i
    request.variant = :phone
  end
end
.

Давайте скажем, у вас есть профилизатор.Теперь вы можете сделать это:

class ProfilesController < ApplicationController
  def index
    respond_to do |format|
      format.html          # /app/views/profiles/index.html.erb
      format.html.phone    # /app/views/profiles/index.html+phone.erb
      format.html.tablet   # /app/views/profiles/index.html+tablet.erb
    end
  end
end
.

Вернуться к вашему вопросу: Если вы хотите искать файлы в другой папке / каталоге, вы можете сделать это:

format.html.phone { render 'mobile/index' }   # /app/views/mobile/index.html+phone.erb
.

Есть также также a Хороший учебник Как его использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top