【问题标题】:Find or create by field doesnt work按字段查找或创建不起作用
【发布时间】: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:in respond_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:in each' 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:in attributes=' 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:in find_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:in new' 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:in send' 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


【解决方案1】:

捂脸

在模型中使用类和类型作为字段....不是一个好举动

两者都是保留名称,导致 ActiveRecord 在构建方法时失败。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 2015-03-17
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多