【问题标题】:Rails: NameError: uninitialized constant OrderItemRails:NameError:未初始化的常量 OrderItem
【发布时间】:2015-09-28 08:24:35
【问题描述】:

models/order_item.rb

class OrderItem < ActiveRecord::Base    
  belongs_to :item
  belongs_to :order 
  belongs_to :user
end

models/order.rb

 class Order < ActiveRecord::Base   
     has_many :order_item
 end

现在,我使用rails console 测试这些。当我输入OrderItem 时,它抛出了

NameError: uninitialized constant OrderItem

更新

我是在 rails console 做的

2.1.3 :021 >   reload!
Reloading...
 => true 
2.1.3 :022 > Order
 => Order(id: integer, user_id: integer, created_at: datetime, updated_at: datetime, status: integer) 
2.1.3 :023 > Item
 => Item(id: integer, status: integer, name: string, price: integer, descript: text, created_at: datetime, updated_at: datetime, cover_file_name: string, cover_content_type: string, cover_file_size: integer, cover_updated_at: datetime, cate_id: integer) 
2.1.3 :024 > User
 => User(id: integer, email: string, encrypted_password: string, created_at: datetime, updated_at: datetime) 
2.1.3 :025 > OrderItem
NameError: uninitialized constant OrderItem
    from (irb):25
    from /Users/Coda/.rvm/gems/ruby-2.1.3@rails416/gems/railties-4.2.3/lib/rails/commands/console.rb:110:in `start'
    from /Users/Coda/.rvm/gems/ruby-2.1.3@rails416/gems/railties-4.2.3/lib/rails/commands/console.rb:9:in `start'
    from /Users/Coda/.rvm/gems/ruby-2.1.3@rails416/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /Users/Coda/.rvm/gems/ruby-2.1.3@rails416/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /Users/Coda/.rvm/gems/ruby-2.1.3@rails416/gems/railties-4.2.3/lib/rails/commands.rb:17:in `<top (required)>'
    from /Users/Coda/Desktop/code/ruby_pra/shop/bin/rails:8:in `<top (required)>'
    from /Users/Coda/.rvm/rubies/ruby-2.1.3/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/Coda/.rvm/rubies/ruby-2.1.3/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from -e:1:in `<main>'

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    NameError: 未初始化的常量 OrderItem

    has_many关联名称应该是plural,所以将order.rb 中的has_many :order_item 更改为has_many :order_items

    #order.rb
    class Order < ActiveRecord::Base   
      has_many :order_items #plural
    end
    

    更新:

    github 上查看您的代码,order_item.rb 之间有一个 空格,即 (order_item .rb)在文件名(app/models/order_item .rb)中。改成order_item.rb

    【讨论】:

    • 我修改了那个,我也检查了其他人has_many。但它仍然抛出了同样的错误。
    • @CodaChang 你重新加载控制台了吗?
    • @CodaChang 您能否用您在控制台中所做的代码以及完整的错误消息更新 ypur 问题。
    • @CodaChang 很奇怪!你的代码看起来不错。您可以尝试打开另一个选项卡并打开 rails 控制台并尝试。
    • 天哪,谢谢。无论如何,这是一个令人尴尬的错误,非常感谢。
    【解决方案2】:

    鉴于 cmets,为了消除任何疑问,以下是我对 代码 的期望:

    #app/models/order.rb
    class Order < ActiveRecord::Base
       belongs_to :user #-> the order belongs to user, so if order_items belong to order, they belong to user, right?
       has_many :order_items
       has_many :items, through: :order_items
    end
    
    #app/models/order_item.rb
    class OrderItem < ActiveRecord::Base
      #table name "order_items"
      #columns id | item_id | order_id | created_at | updated_at
      belongs_to :item
      belongs_to :order 
    end
    

    这是一个典型的has_many :through 关系,我相信你知道。

    --

    使用 Pavan 的更新答案;以上应该让您了解您可以从模型中获得的代码类型。

    【讨论】:

    • 现在我刚刚开始创建一对多结构,是的,我想我应该修改它并使用has_many: through。谢谢。
    猜你喜欢
    • 2014-12-11
    • 2020-06-26
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2016-11-24
    • 2013-08-25
    相关资源
    最近更新 更多