Небольшая разница, признаюсь, но, тем не менее, важна. Док здесь неплохо:
save!
С сохранением! проверки всегда выполняются. Если какой-либо из них не срабатывает, ActiveRecord :: RecordInvalid будет поднят.
сохранить (perform_validation = истина)
если perform_validation является истинным валидация работать. Если какой-либо из них не работает, действие отменяется, и сохранение возвращает false. Если флаг является ложным, то проверки полностью исключаются. Дополнительную информацию см. В разделе ActiveRecord :: Validations.
так, сэкономить! будет не просто возвращать истину или ложь, а только правду об успехе и поднять экспимент, если он не удастся.
Целью этого различия является то, что с сохранением !, вы можете поймать ошибки в своем контроллере, используя стандартные средства ruby для этого, в то время как save позволяет вам делать то же самое, используя стандартные if-предложения. По крайней мере, это то, что я думаю.
логически ответ должен быть «Да», но я не эксперт Rails –
Не уверен, вы можете обнаружить, что второе сохранение не потрудилось попасть в базу данных, если в объекте ничего не изменилось. Не забудьте проверить, идет ли что-нибудь в файл журнала (logs/development.log в среде разработки) –