Найти или создать по полю не работает - PullRequest
1 голос
/ 26 июля 2010

У меня есть модель caleld SpacialBody, и мне нужно заполнить некоторые записи, поэтому сначала я добавил это в свои seed.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 ("Sol") => nil SpacialBody.find_or_create_by_name ("Sol") 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:in respond_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:in each' 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:in attributes=' 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:in find_or_create_by_name' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2475:in initialize' из / var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1963:in new' 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:in send' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1975:in method_missing 'from (irb): 3

Я использовал find_or_create_by_field в других проектах без отступа, и я могуЗдесь я не вижу ничего другого.

Только эта модель имеет проблему, другие в том же проекте работают нормально.

1 Ответ

2 голосов
/ 01 августа 2010

Facepalm

использование класса и типа в качестве полей в модели .... не очень хороший ход

оба являются зарезервированными именами, которые приводят к сбою ActiveRecord при построении методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...