NameError: неинициализированная константа пользователя на консоли irb - PullRequest
0 голосов
/ 14 июля 2020

При записи User.all

Однако я не получаю эту ошибку при использовании рельсов c

У меня всего две модели:

user.rb

class User < ApplicationRecord  
  devise :database_authenticatable,
         :registerable,
         :recoverable,
         :rememberable,
         :validatable   
  has_many :items
end

item.rb

class Item < ApplicationRecord   
  belongs_to :user 
end

Мой Gemfile включает:

gem 'devise'

Я проверил модели и имена контроллеров (единственное и множественное число) и перезапустил консоль. Я пробовал запустить spring stop, и это не помогло.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

rails c - это предполагаемый способ открыть консоль для вашего приложения. Он загружает рельсы, все ваши модели и все остальное, что необходимо.

Вы можете потребовать все компоненты самостоятельно, позвонив require_relative 'config/environment' в irb, но rails c просто проще.

Просто используйте rails console вместо irb.

0 голосов
/ 14 июля 2020

IRB REPL против Rails Console

Если вы вызываете irb из командной строки, вы не получаете подсказку внутри приложения Rails; вы просто получаете REPL без каких-либо ваших объектов Rails. В вашем случае User - это модель Rails. Он недоступен в обычном сеансе irb, если вы не потребуете сначала / загрузить Users.rb и все его зависимости внутри сеанса irb.

Вместо этого вызовите rails console (rails c для краткости), чтобы предоставить Сессия irb на базе Rails. Консоль Rails позаботится о загрузке и инициализации Ruby в ядре Rails, различных драгоценных камней, объявленных в вашем Gemfile, и ваших пользовательских объектов Rails, таких как модели и помощники.

После того, как класс User был правильно настроен загружен или обязателен, Пользователь будет действительным объектом. Вы можете сделать это вручную в irb, если хорошо понимаете процесс инициализации Rails , но вызов консоли Rails проще и менее подвержен ошибкам.

...