добавление экземпляра в модель миграции - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь добавить экземпляр ресторана в мою любимую модель, но получаю сообщение об ошибке «bin / run.rb: 441: in add_favorite_restaurant': undefined method id 'для nil: NilClass (NoMethodError)». В таблице миграций модель для избранного состоит из restaurant.id и customer.id, поэтому я не понимаю, почему при использовании идентификатора возникает ошибка, поскольку она необходима ...

def add_favorite_restaurant(customer)
  puts "What restaurant would you like to add to your favorites?"
  favorite_name = gets.chomp
  restaurant = Restaurant.find_by(name: favorite_name)
  # binding.pry
  Favorite.create(
    restaurant_id: restaurant.id,
    customer_id:   $customer.id
  )
  puts "You have successfully added #{favorite_name} to your favorites"
end

Ответы [ 2 ]

1 голос
/ 18 октября 2019

customer передается в качестве параметра, но вы используете $customer - и в коде переменная restaurant может быть равна нулю из команды restaurant = Restaurant.find_by(name: favorite_name), если ресторан не существует в вашей базе данных

0 голосов
/ 18 октября 2019

Переменные, которые начинаются с $ в Ruby, являются глобальными переменными ... которые почти никогда не должны использоваться.

Итак, совершенно очевидно, что ошибка undefined method id for nil:NilClass исходит из этой строки. ..

customer_id: $customer.id

customer является параметром метода add_favorite_restaurant ... так что вы можете просто удалить знак доллара, чтобы решить проблему (при условии, что аргумент, который вы передаете, не является nilи является экземпляром Customer) ...

customer_id: customer.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...