2009-06-23 8 views
0

Ich verwalte derzeit mehrere Modelle von einer einzigen SITE MANAGER-Seite. Ich habe die folgenden Beziehungen:(Rails) Architektur eines Multi-Modell-Controllers und Indexansicht ...?

Sites -> Buildings -> Meters -> Values 

Neben jedem „Sites“ Artikel Ich habe „Bearbeiten | Löschen | Add Gebäude“ Neben jedem „Gebäude“ Artikel Ich habe „Bearbeiten | Löschen | Add Meter“ Neben jedem " Meter "item I have" Bearbeiten | Löschen | Wert hinzufügen " Neben jeder" Wert "Option habe ich" Bearbeiten | Löschen "

An dieser Stelle habe ich eine Frankenstein-Controller namens" SiteManagerController ", der diese Seite verwaltet. Ich habe einfach ein Verfahren (und entsprechende Route in der Datei Routen) wie folgt:

add_site 
add_building_to_site 
add_meter_to_building 

delete_site 
delete_building 
delete_meter 

Was ich frage mich aber ist, ob es ein Qualitäts Mechanismus, mit dem ist die vorhandene Element-Controller CRUD verwenden Methoden in der Lage, die entsprechende RJS-Datei für die "SiteManager" Seite und Controller zu rendern?

Es wäre schön, wenn ich irgendwie zum ursprünglichen Controller routen könnte (um nicht alle Methoden manuell umschreiben zu müssen), während ich auch Rails Redirect Kontrolle (nicht nur visuell, sondern kontextabhängig) zurück zum "SiteManager" habe Controller nach dem Erstellen oder Löschen. Denken Sie daran, dass ich mich nicht mit Formularen, sondern einfach mit einer INDEX-Seite und mehreren "link_to_remote" s

beschäftige. Ich stelle sehr wahrscheinlich die falsche Frage, also bedenken Sie, dass ... auf jeden Fall, ich ' Ich bin offen für Vorschläge.

Am besten.

Antwort

0

Sie können absolut die CRUD-Methoden der bestehenden Artikel-Controller verwenden. Sie können link_to_remote auf jede URL zeigen und es wird die HTML einfügen, die Sie es anweisen. Solange Sie die Standardrouten in routes.rb behalten, sollte alles gut funktionieren. Dadurch bleibt der Benutzer auf der SiteManager-Seite, aber er interagiert mit den RESTful-Routen hinter den Kulissen.

link_to_remote "Edit", :update => "site_#{site.id}", 
    :url => site_url(site), :method => :put 
link_to_remote "Add Building", :update => "new_building", :url => buildings_url, 
    :method => :post 

SitesController < ApplicationController 
    def update 
    @site = Site.find(params[:site_id]) 
    @site.update_attirbutes!(params[:site_id]) 
    render :partial => @site 
    end 
end 

BuildingsController < ApplicationController 
    def create 
    @building = Building.create(params[:building]) 
    render :partial => @building 
    end 
end 
+0

Verstanden, aber wie kann ich dann "render: update" und beeinflussen die "SiteManager" Indexseite? Platziere ich das in den Controller jedes Elements? Wie wird es wissen, eine partielle oder greifen Sie rjs aus dem "SiteManager" Kontext, wenn es fertig ist? –