Rails `update_attributes` Неопределенный метод`first` для nil:NilClass
Я пытаюсь использовать update_attributes для записи, но это не удается, и я не могу понять, почему, я, должно быть, упускаю что-то очевидное, поскольку я использовал этот метод много раз.
Я пытаюсь заполнить данные для модели, которая использует Globalize3
для его имени переменной.
class City < ActiveRecord::Base
attr_accessible :name
translates :name
end
Обратите внимание, что в городе нет столбца с именем name
,
В консоли у меня нет проблем делать что-то вроде city.update_attributes(name: "new name")
, но следующий код (в seeds.rb
) продолжает терпеть неудачу с Undefined method
первыйfor nil:NilClass
:
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
1 ответ
Я наконец понял это, используя след.
Оказывается, мой собственный метод with_locale
также определяется globalize3 и вызывает всевозможные проблемы.
Благодаря @cthulhu
Я узнал о I18n.with_locale
и использовал это вместо этого.