Rails 3: обслуживание статических ресурсов из разных мест в зависимости от темы - PullRequest
4 голосов
/ 01 июля 2011

Я создаю простую систему тем для приложения rails 3. Тема состоит из папки, расположенной в Rails.root / themes, содержащей

  • Файл манифеста .yml
  • некоторые жидкость файлы шаблонов
  • Подпапка статических активов

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

Следовательно, мне нужен способ заставить рельсы переписать

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

Как я могу решить эту проблему?

редактировать: другие требования

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

В настоящее время я нашел только это:

config.asset_path = proc { |asset_path| "assets/#{asset_path}" } 

, который полностью соответствует моим требованиям, к сожалению, он не будет применяться при включенном конвейере активов.

1 Ответ

0 голосов
/ 05 июля 2011

Взгляните на плагин themes_for_rails .

Следующие выдержки из файла readme показывают, как вы можете изменить используемую тему, основываясь на любой логике, которую вам требуется.

В действии контроллера:

class MyController < ApplicationController
  def show
    theme "purple"
  end
end

На уровне класса в вашем контроллере:

class MyController < ApplicationController
  theme "purple" # all actions will use this theme
  def show
    ...
  end
end 

Или используя лямбда / функцию «resolver»:

class MyController < ApplicationController
  theme :theme_resolver
  # ...
private
  def theme_resolver
    current_user.theme # or anything else that return a string. 
  end
end

Существуют также вспомогательные функции для ваших просмотров и почтовых программ.

...