Ich baue ein CMS mit verschiedenen Modulen (Blog, Kalender, etc.) mit Rails 2.3. Jedes Modul wird von einem anderen Controller verwaltet und das funktioniert gut.Dynamisches Rails Routing basierend auf Datenbank
Das einzige Problem, das ich habe, ist mit der Stamm-URL. Abhängig von der vom Benutzer gewählten Konfiguration sollte diese Standard-URL ein anderes Modul zeigen, d.h. einen anderen Controller, aber die einzige Art, den richtigen Controller zu bestimmen, besteht darin, die Datenbank zu überprüfen, welches "Standard" -Modul angezeigt werden soll.
Für den Moment verwende ich einen bestimmten "root" Controller, der die Datenbank überprüft und an den richtigen Controller umleitet. Allerdings würde ich bevorzugen, dass die URL nicht geändert wird, was bedeutet, dass ich den richtigen Controller von derselben Anfrage aufrufen möchte.
Ich habe versucht, Rails Metal zu verwenden, um diese Informationen abzurufen und manuell den Controller aufzurufen, den ich möchte, aber ich denke, ich erfinde das Rad neu (identifizieren Sie den Anforderungspfad, um den Controller auszuwählen, Sitzung zu verwalten usw.).
Irgendeine Idee? Vielen Dank im Voraus!
Dieser Code in lib/root_rewriter.rb
: überprüfen, ob die
module DefV
class RootRewriter
def initialize(app)
@app = app
end
def call(env)
if env['REQUEST_URI'] == '/' # Root is requested!
env['REQUEST_URI'] = Page.find_by_root(true).uri # for example /blog/
end
@app.call(env)
end
end
end
Dann Diese Middleware wird am unteren
require 'root_rewriter'
ActionController::Dispatcher.middleware.insert_after ActiveRecord::QueryCache, DefV::RootRewriter
in Ihrem config/environment.rb
Ja, das funktioniert! Das war mehr oder weniger das, was ich bereits versuchte, aber bisher ohne Erfolg. Danke Jan! –