Verschiedene Routen, aber mit dem gleichen Controller für Modell-Subklassen in Rails
-
21-09-2019 - |
Frage
Ich habe ein Modell Eigentum, die Unterklassen mit STI hat,
und die ich alle mag die gleichen Controller verwenden, mit nur anderer Sicht partials auf der Unterklasse abhängig.
Property
Restaurant < Property
Landmark < Property
Es funktioniert finden, außer ich bin nicht sicher, wie die Unterklasse in der Steuerung zu erkennen, die richtige Ansicht zu machen. D. h. / Restaurants arbeitet und auf die Eigenschaften Controller geht, aber ich kann nicht sagen, dass sie das Restaurant Unterklasse wollen?
map.resources :restaurant, :controller => :properties
map.resources :properties
Lösung
Ein einfacher Weg, um das Problem zu fi wäre ein Sub-Controller zu erstellen:
class RestaurantsController < PropertiesController
end
In den Routen würden Sie Restaurants an den Restaurants Controller zugeordnet werden.
Update: Alternativ können Sie so etwas wie dies in Ihrem routes.rb
versuchen:
map.resources :restaurants, :controller => :properties, :requirements => {:what => :Restaurant}
map.resources :properties, :requirements => {:what => :Property}
Dann können Sie ein, bevor der Filter verwenden params zu überprüfen [: was]. Und Änderungsverhalten entsprechend
Beispiel:
class PropertiesController < ApplicationController
before_filter select_model
def select_model
@model = params[:what].constantize
end
def show
@model.find(params[:id])
...
end
...
end