我有一个类方法:

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


我有一个rake任务,它创建一个带有“ AF”之类的country_code的城市。我希望通过调用类方法并引用键值对来将“ 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:没有将符号隐式转换为整数


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

最佳答案

由于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是您的String模型中的City(不是整数)。

10-06 01:54