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

ActiveRecord不能在一张桌子上工作

  •  1
  • f00860  · 技术社区  · 14 年前

    我有一个轨道模型:

    ruby-1.9.2-p0 > NavItem
     => NavItem(id: integer, item_identifier: string, description: string, description2: string, packing_unit: string, sales_unit_of_measure: string, ean_code: string, evp_price: string, item_category_code: string, class: string, product_group_code: string, maintenance_status: string) 
    

    如果我想创建一个记录:

    ruby-1.9.2-p0 > NavItem.create
    NoMethodError: undefined method `has_key?' for nil:NilClass
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0/lib/active_support/whiny_nil.rb:48:in `method_missing'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/attribute_methods/read.rb:69:in `class'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/persistence.rb:285:in `attributes_from_column_definition'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/locking/optimistic.rb:62:in `attributes_from_column_definition'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/base.rb:1396:in `initialize'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/base.rb:496:in `new'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0/lib/active_record/base.rb:496:in `create'
     from (irb):20
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:44:in `start'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:8:in `start'
     from /Users/amueller/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands.rb:23:in `<top (required)>'
     from script/rails:6:in `require'
     from script/rails:6:in `<main>'
    

    我能做什么?我还有其他型号的,都很好用。我不知道如何捕捉这个错误:(列中是否有保留字,或者Rails是否尝试在这个问题上应用一些超过约定魔力的配置?

    我将Rails3与Ruby1.9.2结合使用。

    2 回复  |  直到 12 年前
        1
  •  5
  •   Dave Pirotte    14 年前

    你正在使用 class (保留字)作为您的列名之一。如果你改变了,你应该会好起来的。

        2
  •  0
  •   b6fan    12 年前

    如果不想更改数据库架构,可以重写“class”方法:

    class NavItem < ActiveRecord::Base
      def class
        NavItem
      end
    end