У меня есть образцовый caleld SpacialBody, и я должен отобрать некоторые записи так прежде всего, я добавил это к своему seeds.rb
[
["Sol",0,0,0,"standard"]
].each do |body|
nb=SpacialBody.find_or_create_by_name(body[0])
nb.name = body[0]
nb.x = body[1]
nb.y = body[2]
nb.type = SpacialBody::Types[body[3]]
nb.class = body[4]
nb.save
end
и это произвело ошибку. Я затем вошел в консоль для тестирования кода и нашел, что это произошло:
SpacialBody.new => ("соль") # SpacialBody.find_by_name => ноль SpacialBody.find_or_create_by_name ("Соль") NoMethodError: неопределенный метод
generated_methods' for nil:NilClass from /var/lib/gems/1.8/gems/activesupport-2.3.8/lib/active_support/whiny_nil.rb:52:in
method_missing' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/attribute_methods.rb:356:inrespond_to?' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in
assign_attributes' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2902:ineach' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2902:in
assign_attributes' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2775:inattributes=' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1965:in
отправьте' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1965:infind_or_create_by_name' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2475:in
инициализируйте' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1963:innew' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1963:in
find_or_create_by_name' от/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1975:insend' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1975:in
method_missing' от (irb):3
Я использовал find_or_create_by_field в других проектах без инцидента, и я не вижу ничего различного в своей установке здесь.
Его единственные эта модель, которая имеет проблему, других в том же проекте, хорошо работают.
facepalm
с использованием класса и типа в качестве полей в модели .... не очень хороший ход
оба являются зарезервированными именами, которые вызывают сбой ActiveRecord при построении методов.