class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
ruby-on-rails
ruby-on-rails-3
Mischa Moroshko
quelle
quelle
controller_name.sub('_', ' ').titleize
"Hauskäufer" finden.new.controller_name.classify.constantize
in der Klassendefinition verwenden.Wenn sich Ihr Controller und Ihr Modell im selben Namespace befinden, möchten Sie Folgendes
controller_path
gibt Ihnen den Namespace;controller_name
nicht.Zum Beispiel, wenn Ihr Controller ist
dann:
quelle
Es ist ein bisschen wie ein Hack, aber wenn Ihr Modell nach Ihrem Controllernamen benannt ist, dann:
... würde Ihnen "HouseBuyer" in Ihrer Instanzvariablen @model_name geben.
Dies setzt wiederum eine große Annahme voraus, dass "HouseBuyersController" nur "HouseBuyer" -Modelle behandelt.
quelle
Für funktionierende Namespaces:
quelle
Dies ist nicht möglich, wenn Sie die Standard-MVC verwenden, der Ihr Code nicht zu folgen scheint. Ihr Controller scheint ein Modell zu sein, aber vielleicht haben Sie dort gerade einen Typ. Auf jeden Fall sind Controller und Modelle in Rails MVC grundsätzlich getrennt, sodass Controller nicht wissen können, welchem Modell sie zugeordnet sind.
Zum Beispiel könnten Sie ein Modell namens post haben. Dies kann einen Controller posts_controller oder einen Controller wie articles_controller haben. Rails kennt Modelle nur, wenn Sie den tatsächlichen Code in der Steuerung wie z
In Schienen-Standardsteuerungen gibt es keine Möglichkeit, das Modell zu kennen.
quelle
Die akzeptierte Lösung funktionierte bei mir nicht, da mein Controller und mein Modell einen Namespace hatten. Stattdessen habe ich die folgende Methode entwickelt:
quelle