2016-08-11 5 views
0

Я следую руководству по рельсам Майкла Хартла и нахожусь в блокпосте, который, похоже, не имеет смысла.undefined method in Rails tutorial

Я добавил новый метод к классу пользователя:

def full_name 
    "test" 
end 

Так что, когда я делаю что-то вроде: test = User.new(name: 'Phil Collins', email: '[email protected]') test.full_name

Я получаю NoMethodError ошибки: неопределенный метод `FULL_NAME»

Huh ? Это полностью в классе User. Что мне не хватает?

+1

Невозможно рассказать без какого-либо контекста. Вы в консоли Rails? Перезагрузили или перезапустили? –

+0

Да, я в консоли rails. Позвольте мне перезапустить консоль и посмотреть. Странная вещь, хотя в том, что я все еще могу запустить другие методы в этом классе ... – echoBr00tal

+0

Итак ... добавление нового метода «на лету» противоречит правилам в консоли rails? Вы должны потребовать его снова, похоже. Имеет смысл. У меня нет большого опыта работы в CLI. – echoBr00tal

ответ

1

Когда Rails загружает приложение, он загружает все классы в памяти.

Консоль Rails вызывает Rails.application.initialize! и загружает текущий код приложения.

Rails поставляется с приятными функциями для разработчиков, которые используются в режиме разработки, в частности, весной.

https://github.com/rails/spring

Однако, это работает только для серверов развития не консоли.

Существует различие, потому что когда Rails загружает сервер, тогда определяется Rails::Server. Консоль определяет Rails::Console.

Существует способ отражения изменений кода в консоли с помощью reload!.

Это будет отражать изменения кода в консоли, но есть улов.

Старые объекты не изменились, для этого вы должны использовать test.reload.

Смежные вопросы