Rails: NameError: неинициализированная константа OrderItem
модели /order_item.rb
class OrderItem < ActiveRecord::Base
belongs_to :item
belongs_to :order
belongs_to :user
end
модели /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>'
2 ответа
NameError: неинициализированная константа OrderItem
Название ассоциации для has_many
должно быть plural
так что меняй has_many :order_item
в has_many :order_items
в order.rb
#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
В свете комментариев и для устранения каких-либо сомнений вот что я ожидал от кода:
#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
отношения, как я уверен, вы знаете.
-
Используйте обновленный ответ Павана; Вышеприведенное должно дать вам представление о типе кода, который вы можете ожидать от своих моделей.