В Ruby on Rails какая разница между созданием и созданием!а API документации нет? - PullRequest
11 голосов
/ 16 февраля 2011

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

Ответы [ 3 ]

17 голосов
/ 16 февраля 2011

Да, create! вызовет исключение при сбое, create просто вернет false.Документация здесь:

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-create-21

2 голосов
/ 19 февраля 2015

Я проверил это в 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/ruby-2.1.5@rails_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)>
1 голос
/ 16 февраля 2011

Да.Возникает исключение, если запись недействительна.

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