2010-03-24 19 views
5

Ich habe einen Controller ohne verwandtes Modell. Dieser Controller soll einige Informationen von verschiedenen Modellen umfassen. Ich habe dort viele Aktionen, die bestimmte Ansichten auf der Seite definieren. Was wäre der beste Weg, um Routen für diesen Controller zu organisieren?Basic Ruby on Rails Frage zum Routing

Was ich möchte ist/Dashboard/etwas zeigen auf eine Aktion in der Dashboard-Controller. Nicht Aktionen wie new/edit, aber beliebig (showstats, etc).

mit Versuch und Irrtum habe ich so etwas wie diese:

map.dashboard 'dashboard/:action', :controller => 'dashboard', :action => :action 

Jetzt ist es möglich, diese URLs mit dem Helfer zuzugreifen:

dashboard_url('actionname') 

Dieses approch scheint ok zu arbeiten, ist aber Das ist der Weg zu gehen? Ich bin mir nicht ganz sicher, wie die Namen der Helper-Methoden generiert werden. Wie generiere ich dieselben Helper-Namen wie in Basis-Controllern "action_controller_url"? Das wäre generischer und macht den Code konsistenter.

Vielen Dank im Voraus.

Antwort

5

Sie müssen den Schlüssel :action => :action in der Route nicht angeben, dies ist bereits für Sie erledigt. Ansonsten ist es gut, wie du es gemacht hast.

Sie können es auch als Symbol angeben: dashboard_url(:actionname), aber man wusste schon, dass;)

+0

Gibt es eine Möglichkeit, die Helfer zu formatieren, oder eine eine benutzerdefinierte bieten? IE: Aktionsname_Dashboard_url statt Dashboard_URL (: Aktionsname)? – mdrozdziel

+0

Sie müssten für jede einzelne eine neue Route definieren. Die Singularroute-Methode ist ein paar Zeichen länger, führt aber insgesamt zu weniger Code. –

+0

Ja, ich habe zwar einen automatischen Mechanismus, der die Helfer im laufenden Betrieb erzeugt, aber da das nicht der Fall ist, bleibe ich bei der Konvention armaturenbrett_url (: actionname). – mdrozdziel

2

Wenn Sie Hilfsmethoden für alle Ihre Armaturenbrett Aktionen möchten Sie sie alle mit Namen Routen, zum Beispiel angeben sollten:

map.example_dashboard 'dashboard/example', :controller => 'dashboard', :action => 'example' 
map.another_dashboard 'dashboard/another', :controller => 'dashboard', :action => 'another' 

Dann generieren Schienen einen _url- und einen _path-Helfer für jede benannte Route. Ich bevorzuge Ihren Ansatz, aber er ist flexibler und einfacher.

+0

Wäre die Indexseite für den OrdersController und den ClientController nicht besser, um das "Dashboard" von diesen zu bedienen? –

+0

Definitiv habe ich nur Action-Namen für mein Beispiel erstellt. Ich werde es zu etwas anderem ändern. – Teoulas

0

Wie gleiche Helfer Namen wie in Basisregler "action_controller_url" generieren?

map.action_controller(
    'action_controller', 
    :controller => 'controller', 
    :action => 'action', 
    :conditions => { :method => :get } # You can restrict the HTTP reqs allowed 
) 
+0

Das ist nicht wirklich die Antwort. Wenn ich 50 Aktionen habe, muss ich diesen Code 50 mal kopieren oder einige Werid Loops über die Karte erstellen ... – mdrozdziel