我有一个班级方法:
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]
类方法?
答案 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
模型中的String
是City
(不是整数)。
答案 1 :(得分:0)
认真回答:
使用country_code Gem! https://github.com/stefanpenner/country_select https://github.com/hexorx/countries https://github.com/alexrabarts/iso_country_codes
I18n准备就绪