2016-05-06 6 views
2

Beim Refactoring meines Dashboard-Controllers habe ich die Teile der verschiedenen polymorphen Typen des Benutzers in ein eigenes Modell zerlegt.Entfernen Sie die Anführungszeichen aus der Zeichenfolge, damit ich sie zu einer Controller-Aktion hinzufügen kann

Zum Beispiel verwende ich

Dashboard::Teacher.new(current_user) 

für Lehrer,

Dashboard::Student.new(current_user) 

für Studenten und

Dashboard::Parent.new(current_user) 

für die Eltern.

doppelten Code zu entfernen, wie würde ich den polymorphen Benutzertyp festgelegt, die eine Zeichenfolge in ist: können

Dashboard::#{UserTypeGoesHere}.new(current_user)? 

Antwort

2

Sie Module#const_get verwenden, um eine Klasse innerhalb eines Moduls definierte den Zugriff auf der Grundlage seines String-Wert:

user_type = "Parent" 
Dashboard.const_get(user_type).new(current_user) 

In dem obigen Code Dashboard.const_get(user_type) wertet einfach zu Dashboard::Parent:

Dashboard.const_get("Parent") == Dashboard::Parent # => true 
+0

Scheint jetzt eine undefinierte Methode 'strainify_keys'-Fehler zu verursachen. –

+0

'stringify_keys' ist eine Methode, die von ActiveSupport in Rails für das Hash-Objekt definiert wurde, nicht sicher, was es mit dem obigen Beispiel tun würde. Können Sie den Code posten, der den Fehler verursacht? –