我正在尝试在记录上使用update_attributes,但它失败了,我无法弄清楚为什么,我必须遗漏一些明显的东西,因为我已经多次使用该方法。
我正在尝试为使用Globalize3
作为名称变量的模型播种数据。
class City < ActiveRecord::Base
attr_accessible :name
translates :name
end
请注意,City没有名为name
的列。
在控制台中我执行city.update_attributes(name: "new name")
之类的操作时没有任何问题,但以下代码(seeds.rb
)始终以Undefined method
for nil:NilClass
{<1}}失败:
localized_cities_attributes = [
{ en: { name: "New York City" }, fr: { name: "New York" } },
{ en: { name: "Montreal" }, fr: { name: "Montréal" } }
]
localized_cities_attributes.each do |city_localized_attributes|
city = nil
city_localized_attributes.each do |locale, attributes|
with_locale(locale) do
if city
city.update_attributes(name: attributes[:name])
elsif (city = City.find_by_name(attributes[:name])).nil?
city = City.create(attributes)
end
end
end
end
with_locale
定义如下:
def with_locale(new_locale, &block)
return if block.nil?
locale_to_restore = I18n.locale
I18n.locale = new_locale
block.call
I18n.locale = locale_to_restore
nil
end
答案 0 :(得分:1)
我终于使用了跟踪。
事实证明我的自定义方法with_locale
也是由globalize3定义的,并引发了各种各样的问题。
感谢@cthulhu
,我发现了I18n.with_locale
并使用了它。