我有一个类方法:
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
(不是整数)。