2017-02-21 52 views
0

地圖關注哈希鍵我創建了模型中的關注與表列

module Employee 
    extend ActiveSupport::Concern 

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

我有模型

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

作業表具有帶有值0,1,2 哪有列類型我將hash值(0,1,2)中的值映射到列類型,並返回與其相關的字符串值?因此,如果用戶類型爲1,則返回b

感謝

+0

這個問題根本沒有意義 - 你想要達到什麼目的,更重要的是爲什麼? – max

回答

0

你可以只去耦#job方法和使用這樣的(如果我正確認識你):

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 

上無關的註釋,freeze在實例方法中的東西是一種代碼異味,如果可能的話,您可能想要將其提升爲常量。

+0

謝謝@Anthony。如果我想創建一個方法來獲取job_name我怎麼能在模型中做到這一點,或者我可以直接在控制器中做到這一點,然後將結果保存到實例變量並在JSON中調用? – User7354632781

+0

你可以在關注點或模型中做到這一點,看看新的編輯。 – Anthony

+0

我創建的方法,但不斷得到job_name null – User7354632781