使用 table 列映射关注哈希键

map concern hash keys with the table column

我在模型中创建了一个问题

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

Jobs table 具有值为 0、1、2 的列类型 我如何映射与列类型有关的散列 (0,1,2) 中的值以及与之关联的 return 字符串值?所以如果用户类型是 1 那么 return B

谢谢

您可以解耦 #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在实例方法中使用某些东西是一种代码味道,如果可能,您可能希望将其提升为常量。