2017-02-21 3 views
0

habe ich eine Sorge in ModellKarte betreffen Hash-Schlüssel mit der Tabellenspalte

module Employee 
    extend ActiveSupport::Concern 

    included do 
    def job 
     job_hash = { 
     '0': 'A', 
     '1': 'B', 
     '2': 'C' 
     }.freeze 
     job_hash[:"#{@job}"] 
    end 
end 

Ich habe Modell

class Company < ActiveRecord::Base 
    self.table_name = 'Jobs' 
    include Employee 
end 

Jobs Tabelle hat Spaltentyp, der 0-Werte hat, 1, 2 Wie kann ich mappe die Werte von Hash (0,1,2) in Bezug auf den Spaltentyp und gebe den zugehörigen String-Wert zurück? so dass, wenn der Benutzer Typ 1 ist dann wieder B

Dank

+0

Diese Frage ergibt überhaupt keinen Sinn - was versuchen Sie zu erreichen und vor allem warum? – max

Antwort

0

könnten Sie entkoppeln nur die #job Methode und verwenden Sie es wie folgt aus (wenn ich verstehen Sie richtig):

module Employee 
    extend ActiveSupport::Concern 

    included do 
    def job 
     job_mapping[:"#{@job}"] 
    end 

    def job_mapping 
     { 
     '0' => 'A', 
     '1' => 'B', 
     '2' => 'C' 
     } 
    end 

    def job_name 
     job_mapping[type.to_s] 
    end 
    end 
end 


company = Company.find(some_id) 
job_name = company.job_name 

Auf ein Wenn man etwas in eine Instanz-Methode schreibt, ist das ein Code-Geruch, den du wahrscheinlich möglichst auf eine Konstante hochstufen willst.

+0

Danke @Anthony. Wenn ich eine Methode zum Abrufen von job_name erstellen möchte, wie kann ich das im Modell tun oder kann ich das direkt im Controller tun, dann das Ergebnis in der Instanzvariablen speichern und JSON aufrufen? – User7354632781

+0

Sie könnten es in der Sorge oder das Modell tun, sehen Sie die neue Bearbeitung. – Anthony

+0

Ich habe die Methode erstellt, aber bekomme Jobname null – User7354632781

Verwandte Themen