【发布时间】:2023-03-16 13:30:01
【问题描述】:
我有一个名为 SpacialBody 的模型,我需要播种一些记录,所以首先我将它添加到我的种子.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") => 无 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:inmethod_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:inassign_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:inassign_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:insend' 来自 /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:ininitialize' 来自 /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:infind_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:inmethod_missing' 来自 (irb):3
我已经在其他项目中使用了 find_or_create_by_field ,但我在此处的设置中看不到任何不同。
只有这个模型有问题,同一个项目中的其他模型工作正常。
【问题讨论】:
-
你检查过你的模型的验证了吗?
-
没有验证模型只是类 SpacialBody
标签: ruby-on-rails activerecord