Совершенно очевидно, что TheChosenOne.first
- это nil
, а nil
не имеет метода #user_id
.
Я предполагаю, что ваш вопрос в основном таков: Как мне узнать почему TheChosenOne.first
равно nil
?
Мы будем использовать pry
, byebug
и rails console
для отладки. Сначала убедитесь, что pry
установлен в вашем Gemfile, если еще не установлен:
group :development, :test do
gem 'pry-byebug' # pry integrated with byebug
gem 'pry-rails' # integrates pry with rails
end
Сначала bundle install
, затем запустите rails console
:
% rails console
Running via Spring preloader in process 91323
Loading development environment (Rails 6.0.3.2)
[1] pry(main)>
Вы должны иметь возможность для выполнения TheChosenOne.first
и подтверждения nil
:
[1] pry(main)> TheChosenOne.first
=> nil
pry
имеет хорошую функцию отладки для проверки исходного кода метода с помощью $
:
[2] pry(main)> $ TheChosenOne.first
From: /myrails/app/models/the_chosen_one.rb:2:
Owner: #<Class:TheChosenOne>
Visibility: public
Signature: first()
Number of lines: 3
def self.first
nil
end
Я создал фиктивный пример, где TheChosenOne.first
просто возвращает nil
, но вы должны увидеть, как это реализовано и где оно определено. Используйте эту информацию, чтобы копнуть на один уровень глубже, чтобы выяснить, почему он возвращает nil
, потому что кажется, что этого не должно быть.