我想在記錄上使用update_attributes,但它失敗了,我找不到原因,我必須丟失一些明顯的東西,因爲我已經使用過該方法大量的時間。Rails`update_attributes`未定義的方法第一個爲零:NilClass
我想爲其名稱變量使用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
失敗:
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
我認爲這可能是問題(http://stackoverflow.com/questions/9496816/ruby-on-rails-with-globalize3-find-by-translated-field-makes-record-readonly?rq=1 ),但我的記錄似乎是可寫的。 – mbillard
更多的堆棧跟蹤將有所幫助。 「第一」被稱爲「哪裏」?它在你的代碼中?通過'Globalize3'?在鐵軌? – gregates
同意@gregates。您向我們展示的錯誤與在無對象上使用對'第一個'方法的調用有關。在您的示例中,我看不到「第一個」的呼叫。全堆棧跟蹤,更多代碼,或兩者請? – coderjoe