ActiveRecord имеет create
, а некоторые используют create!
... Является ли это тем, что create!
может вызвать исключение, а create
- нет? Я не могу найти create!
в
текущие документы API Rails...
В Ruby on Rails какая разница между созданием и созданием! и документы API не имеют его?
Ответ 1
Да, create!
вызовет исключение при ошибке, create
просто вернет false. Документация здесь:
http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-create-21
Ответ 2
Да. Исключение возникает, если запись недопустима.
Ответ 3
Я тестировал его в Rails 4.2.0
. В этой версии Rails, кажется, #create!
работает как сказано в другом ответе, но не в методе #create
.
создает объект (или несколько объектов) и сохраняет его в базе данных, если проходят проверки. Получаемый объект возвращается, был ли объект успешно сохранен в базе данных или нет.
Ниже приведена какая-либо попытка в соответствии с документацией.
Arup-iMac:rails_app_test shreyas$ rails c
Loading development environment (Rails 4.2.0)
[1] pry(main)> show-models Person
Person
id: integer
name: string
created_at: datetime
updated_at: datetime
[2] pry(main)> Person.create!
(0.1ms) begin transaction
(0.1ms) rollback transaction
ActiveRecord::RecordInvalid: Validation failed: Name can't be blank, Name is too short (minimum is 3 characters)
from /Users/shreyas/.rvm/gems/[email protected]_app_test/gems/activerecord-4.2.0/lib/active_record/validations.rb:79:in `raise_record_invalid'
[3] pry(main)> Person.create
(0.1ms) begin transaction
(0.0ms) rollback transaction
=> #<Person:0x007fdb4cc5b0a0 id: nil, name: nil, created_at: nil, updated_at: nil>
[4] pry(main)> Person.count
(0.2ms) SELECT COUNT(*) FROM "people"
=> 0
[5] pry(main)>