Sagen wir, ich habe eine Rails App mit 3 Modellen, Person, Place und Thing. Nehmen wir an, das Thing verwendet die Vererbung einzelner Tabellen, also gibt es die Unterklassen FancyThing und ScaryThing. Dann sind Routen definiert mit map.resources :people, :places, :things
. Es gibt also keine Controller für FancyThings und ScaryThings, die ThingsController beherrscht jeden Typ.
Jetzt sage ich, dass ich Code haben muss, der eine Liste von allem anzeigt, das Links zu ihnen hat. Wenn ich diesen Code in meiner Sicht habe:
%Vor% Wenn der Gegenstand eine Person oder ein Ort ist, funktioniert das gut, polymorphic_path
kümmert sich um die korrekte Route. Aber wenn der Gegenstand ein FancyThing oder ScaryThing ist, explodiert dies, weil es versucht, fancy_thing_path
zu verwenden, für das es keine Route gibt. Ich möchte irgendwie thing_path
verwenden. Idealerweise würde es eine Methode für Thing und / oder seine Unterklassen geben, die irgendwie anzeigt, dass die Unterklassen die Basisklasse verwenden sollten, um die Route zu erzeugen. Gibt es dafür eine elegante Lösung?
Das wird den Trick machen:
%Vor%Dies verwendet die ActiveRecord-Funktion "wird", um eine "Up-Cast" aller Unterklassen von Thing zur Thing-Basisklasse durchzuführen.
Ich habe keine richtige Antwort, aber zumindest kann ich dieses Problem mit Nicht-DRY-Code lösen:
map.resources: dinge,: has_many = & gt; : Zeug map.resources: fancy_things,: controller = & gt; "Dinge",: has_many = & gt; : Zeug map.resources: scary_things,: controller = & gt; "Dinge",: has_many = & gt; : Zeug
Hoffe, das Problem wird bald in Rand korrigiert werden, da ich fancy_things nur verwalten möchte: Dinge Controller. Mit diesen Routen enden Sie mit URLs wie: / fancy_things / 1, während Sie vielleicht / sachen / 1
wollenTags und Links ruby ruby-on-rails