Rails - Создайте и создайте! Методы, учебник ROR 3
-
26-10-2019 - |
Вопрос
Поэтому я знаю различие между методами Bang (восклицательная отметка) и не Bang Methods, как правило, состоит в том, будет ли метод изменять сам объект или вернуть отдельный модифицированный объект, сохраняя исходный неизвестный.
Затем, создавая пользовательскую модель в главе 6 книги, я наткнулся на User.create
Метод, который создает новую модель и сохраняет ее в базе данных за один шаг. В Майкла Хартла Ruby on Rails 3 Учебник, он пишет, что User.create!
метод »работает так же, как create
метод ... за исключением того, что он поднимает Activerecord :: record-invalid Исключение, если творение не удается. "
Я довольно смущен. Это User.create!
Метод, не следующий за рубином "Convenction" или я что-то упускаю? И если он следит за соглашением, как это User.create!
изменить себя, если это метод класса?
Решение
Хотя многие классы рассматривают методы взрыва как «метод, который изменяет объект на месте», мне нравится описание методов взрыва из Красноречивая книга Рубин лучше:
На практике Руби -программисты резервируют! Украсить имена методов, которые делают что -то неожиданное или, возможно, немного опасное
Таким образом, в этом случае «неожиданный» результат заключается в том, что исключение поднимается вместо того, чтобы просто не удаляться false
.
Другие советы
Надеюсь, это также поможет:
Версии BANG (например, сохранение!) Повышают исключение, если запись недействительна. Версии без Bang не: Сохранить и обновлять_аттрибуты возвращают false, создать и обновлять просто возвращать объекты.
РЕДАКТИРОВАТЬ: Изменен источник, чтобы исправить разбитую ссылку