0

我正在尝试在记录上使用 update_attributes,但它失败了,我不知道为什么,我必须错过一些明显的东西,因为我已经多次使用该方法。

我正在尝试为Globalize3用于其名称变量的模型播种数据。

class City < ActiveRecord::Base
  attr_accessible :name

  translates :name
end

请注意, City 没有名为 的列name

在控制台中,我做类似的事情没有问题city.update_attributes(name: "new name"),但是下面的代码(in 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
4

1 回答 1

1

我终于想通了使用跟踪。

事实证明,我的自定义方法with_locale也是由 globalize3 定义的,并导致了各种问题。

感谢@cthulhu,我发现I18n.with_locale并使用了它。

于 2012-09-25T15:06:07.157 回答