2016-07-29 6 views
1

Ich habe ein Modell, das die Folge Enum hat:Rails 5 erhalten Enum Schlüssel über Integer-Wert

class User < ApplicationRecord 
    enum user_type: [:api_user, :web_user] 
end 

Wenn diese in der Datenbank gespeichert wird, ist es mit dem Integer-Wert speichert, wie erwartet. Ich habe dann eine Funktion, die den Aufzählungs wie folgt aus (in einem Controller) akzeptiert:

do_something_useful(type: User.user_types[:web_user], user: user) 

def do_something_useful(options) 
    some_enum_value = options[:type] 
    user = options[:user] 

    # Not a practical example. Just an example to demonstrate the issue. 

    # Should return Hello, User! You are a web_user type. 
    # But returns, Hello, User! You are a 1 type. 
    'Hello, #{user.name}! You are a #{some_enum_value} type.' 
end 

Das Problem, das ich begegnet bin ist, dass die Optionen [: Typ] den ganzzahligen Wert ist vorbei. Ich möchte den Schlüsselwert von User.user_type durch die ganze Zahl erhalten. Ist das möglich?

Nochmals vielen Dank.

+0

Da Sie ein "Benutzer" -Objekt übergeben und, vorausgesetzt, dass ihm ein 'user_type 'zugewiesen wurde, fragen Sie ihn nicht direkt, um zu sehen, welcher Benutzertyp es ist? 'user.user_type =>" web_user "' –

+0

Mögliches Duplikat von [in Ruby, wie man einen Schlüssel aus dem Hash mit dem Wert extrahiert] (https://stackoverflow.com/questions/13184752/in-ruby-how-to -extract-a-key-from-the-hash-having-the-value) –

Antwort

3

Nun, tat ein bisschen mehr auf der Suche und fand diese Lösung:

User.user_types.key(options[:type]) 

Dies wird den Schlüssel zurück.

Ist das der einfachste Weg? Oder eine andere bessere Lösung?

+0

jetzt Index-Methode wird veraltet sein. Sie sollten die Schlüsselmethode verwenden. Nur aktualisieren. – Hamdan

+1

Index ist veraltet, verwenden Sie stattdessen '.key', ist das gleiche. –