使用符号输入调用类方法

时间:2015-10-11 23:02:42

标签: ruby-on-rails class hash class-method

我有一个班级方法:

class CountryCodes
  def self.country_codes
    { AF: "Afghanistan",
    AL: "Albania",
    ... }
  end
end

我有一个rake任务创建了一个城市,其中country_code就像“AF”。我希望通过调用类方法并引用键值对来将“AF”替换为“阿富汗”。

将country_code设置为“AF”的当前功能是:

city = City.create do |c|
   c.name = row[:name] 
   c.country_code = row[:country_code] # sets country_code to be like "AF"
end

我可以通过拨打puts CountryCodes.country_codes[:AF]来手动检索“阿富汗”。通过结合这些策略,我(错误地)认为我可以:

city = City.create do |c|
   c.name = row[:name] 
   c.country_code = CountryCodes.country_code[:row[:country_code]] #obviously, this failed
end

我运行时发生的故障是:

  耙子流产了!   TypeError:没有将Symbol隐式转换为整数

如何使用CountryCodes.country_code的动态输入正确调用row[:country_code]类方法?

2 个答案:

答案 0 :(得分:2)

由于CountryCodes.country_code具有符号散列,因此在引用符号时需要调用符号。例如:country_code["AF"]country_code[:AF]不同。

要更正此问题,请使用Ruby的row[:country_code]将字符串to_sym转换为符号:

city = City.create do |c|
   c.name = row[:name] 
   c.country_code = CountryCodes.country_code[row[:country_code].to_sym]  # < .to_sym
end

由于我看不到您的架构,我的答案也是假设country_code模型中的StringCity(不是整数)。

答案 1 :(得分:0)