(Rails) Architecting ein Multimodell-Controller und Index Ansehen ...?
-
06-07-2019 - |
Frage
Ich bin die Verwaltung derzeit mehrere Modelle von einer einzigen BAULEITER Seite. Ich habe die folgenden Beziehungen:
Sites -> Buildings -> Meters -> Values
Neben jedem „Sites“ Artikel Ich habe „Bearbeiten | Löschen | hinzufügen Building“ Neben jedem „Gebäude“ Artikel habe ich „Bearbeiten | Löschen | Add Meter“ Neben jedem „Meter“ Artikel habe ich „Bearbeiten | Löschen | Wert hinzufügen“ Neben jedem „Value“ Artikel habe ich „Bearbeiten | Löschen“
An diesem Punkt habe ich eine frankensteined Controller „SiteManagerController“, die diese Seite verwaltet. Ich habe einfach ein Verfahren (und eine entsprechende Route in der Routen-Datei) wie folgt:
add_site
add_building_to_site
add_meter_to_building
delete_site
delete_building
delete_meter
Was ich frage mich jedoch, ob es ist ein Qualitäts Mechanismus, mit dem die bestehenden Artikel Controller CRUD Methoden zu verwenden, während der Lage, die entsprechende RJS-Datei für die „Sitemanager“ -Seite und Controller zu machen?
Es wäre schön, wenn ich könnte irgendwie Weg an den ursprünglichen Controller (um nicht manuell alle Methoden umschreiben zu müssen), während auch mit Schienen Steuer umleiten (nicht nur optisch, sondern kontextuell) zurück zum „Sitemanager“ Controller nach dem Erstellen oder Löschen. Beachten Sie, dass ich nicht mit Formen zu tun, sondern einfach eine Indexseite und mehrere „link_to_remote“ s
Ich bin ziemlich vielleicht die falsche Frage, so dass betrachten ... auf jedem Fall, ich bin offen für Vorschläge.
Best.
Lösung
Sie können absolut verwenden, um die austretenden Artikel Controller CRUD Methoden. Sie können link_to_remote
jeder URL verweisen, und es wird die HTML einfügen Sie es zu unterweisen. Solange Sie die Standard-Routen in routes.rb
halten, sollte alles funktionieren. Dadurch wird der Benutzer auf der Seite Site halten, aber er wird mit den RESTful Routen hinter den Kulissen interagieren.
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