В Ruby on Rails какая разница между созданием и созданием! и документы API не имеют его?

ActiveRecord имеет create, а некоторые используют create!... Является ли это тем, что create! может вызвать исключение, а create - нет? Я не могу найти create! в текущие документы API Rails...

Ответ 2

Да. Исключение возникает, если запись недопустима.

Ответ 3

Я тестировал его в Rails 4.2.0. В этой версии Rails, кажется, #create! работает как сказано в другом ответе, но не в методе #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)>