Das macht mich verrückt! Ich habe die beiden Modelle Lion
und Cheetah
. Beide erben von Wildcat
.Routen, Weg Helfer und STI in Schienen 4.0
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
STI wird hier verwendet.
Sie alle werden durch den Controller WildcatsController
gehandhabt. Dort habe ich eine before_filer
, um die type
der Wildkatze von der params[:type]
und allen anderen Sachen zu bekommen, um die korrekte Klasse zu verwenden.
In meinem routes.rb
, habe ich die folgenden Routen:
resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
Wenn ich jetzt den Pfad Helfer verwenden wollen, dass ich von den Routen erhalten (lions_path
, lion_path
, new_lion_path
, etc.), ist alles funktioniert wie erwartet, außer den show
und new
Pfaden. Zum Beispiel gibt lions_path
den Pfad /lions
zurück. Der Pfad new
gibt /lions/new?type=Lion
zurück. Gleiches mit dem show
Pfad. Wenn ich versuche, /lions/new
in meine Stammdomäne einzugeben, fügt es den Typ param im Hintergrund korrekt hinzu.
Also meine Frage ist, warum fügt Rails den Parameter type
der URL hinzu, wenn ich den Pfadhelfer verwende? Und warum nur für new
und show
?
Ich verwende Rails 4.0.0 mit Ruby 2.0 mit einer neuen Rails App.
Oh mein Gott. Es kann so einfach sein. Danke für diese schnelle Antwort! Ich wollte einfach keine Controller für jedes der Modelle erstellen, da es in Zukunft eine Menge davon geben wird. Aber das hat es gelöst! – Hiasinho
Mein Vergnügen. Das ist die Stärke von OOP :). Bitte beachten Sie, dass die Vorlagen Wildcats sind. Wenn Sie Lions eigene Meinung zum Index verwenden möchten, fügen Sie einfach eine leere Indexmethode in LionsController hinzu. Aber ich denke, eine allgemeine Ansicht könnte in den meisten Fällen viel bewirken. –
@Hiasinho, vergiss, 'singularize' hinzuzufügen. Diese Lösung hat eine kleine Abhängigkeit vom Pfad, aber Sie sollten in der Lage sein, darüber hinweg zu kommen, sobald sich der Pfad geändert hat. –