Ich habe nach einer Möglichkeit gesucht, je nach eingestelltem Style unterschiedliche Templates verwenden zu können, ohne gleich den kompletten Code umzustrukturieren. Nach längerem Googlen bin ich zu einem Ergebnis gekommen, das sogar noch ein bisschen besser funktioniert als das, was ich erwartet hätte. Rails speichert in
view_paths nicht nur einen einzelnen Pfad, in dem Templates gesucht werden, sondern gleich eine ganze Liste. Die Pfade werden der Reihe nach durchsucht, bis die gewünschte Datei gefunden wurde. Da dieses Array wohl nur einmal pro Seitenaufruf (und zwar ganz am Anfang) gelesen wird, lässt es sich leider nicht per
before_filter bearbeiten. Stattdessen habe ich folgende Lösung gefunden:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class ApplicationController < ActionController::Base
def self.view_paths
paths = ["#{RAILS_ROOT}/app/views"]
option = Option.find_by_name('style')
if option and option.value
paths.unshift("#{RAILS_ROOT}/vendor/templates/#{option.value}")
end
return paths
end
end |
Das Ganze lässt sich prinzipiell auch in jedem Controller einzeln machen.
Das ganze funktioniert offensichtlich mit Rails 2.3.5 und ich gehe davon aus, dass es mit neueren Versionen auch gehen müsste.
Update:
Memo: BB-Code Tags [code] und [tt] ordentlich einbauen.
Update 2:
Alle BB-Codes ergänzt