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 и использовал это вместо этого.

Другие вопросы по тегам