рельсы 3 - разница между widget.save и widget.save! - PullRequest
4 голосов
/ 11 марта 2011

Иногда я вижу!после сохранения и нескольких других активных методов записи ... в чем разница?

Ответы [ 2 ]

13 голосов
/ 11 марта 2011

save вернет false, если запись не может быть сохранена (например, ошибки проверки).

save! вызовет исключение, если запись не может быть сохранена.Используйте save!, когда вы чертовски уверены, что он должен сохранить без проблем, а если нет, то это довольно большая ошибка, и исключение подходит.

3 голосов
/ 11 марта 2011

Общий порядок использования!в конце метода в rails указывает, что функция может вызвать исключение, в отличие от метода non-bang, просто возвращающего значение.

Следствие отказа от выдачи исключения позволяет использовать возвращаемое значение как частьнормальная обработка.

if obj.save
  # yay, it worked!
else
  # boo
end

Обратите внимание, что это не правило, применяемое Ruby, а просто соглашение.Другие библиотеки, такие как стандартная библиотека для String, имеют методы, которые возвращают результат операции вместо изменения значения объекта на месте.

  String s="Hello, world"
  s.gsub("world", "Joe")  # returns a new string object, leaving s alone
  s.gsub!("world", "Joe")  # modifies the value of s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...