代码之家  ›  专栏  ›  技术社区  ›  Arcath

按字段查找或创建不起作用

  •  1
  • Arcath  · 技术社区  · 15 年前

    [
        ["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.新 =># SpacialBody.按名称查找(“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 '缺少方法' respond_to?' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in 指定属性' each' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:2902: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\u 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 '初始化' new' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1963:in 查找或按名称创建 来自/var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active\u record/base.rb:1975:in send' from /var/lib/gems/1.8/gems/activerecord-2.3.8/lib/active_record/base.rb:1975:in 起始(irb):3

    我在其他项目中使用了find\u或create\u by\u字段,没有任何鼓励,我在这里的设置中看不到任何不同。

    只有这种模式有问题,其他在同一个项目的工作良好。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Arcath    15 年前

    将类和类型用作模型中的字段。。。。不是一个好的举动

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