Как правило, вы хотите использовать не-взрывные версии в ваших контроллерах. Это позволяет логику так:
def update
@model = Model.find params[:id]
if @model.update_attributes params[:model] #returns true of false
# handle success
else
# handle failure
end
end
Я часто использую версии взрыва в тестах, когда хочу убедиться, что знаю, что-то не проверяется и не сохраняется. Я определенно потратил впустую тесты отладки, которые терпели неудачу из-за измененных проверок модели, что было бы очевидно, если бы я использовал версии взрыва.
, например
it "should do something" do
m = Model.create! :foo => 'bar' # will raise an error on validation failure
m.should do_something
end
С точки зрения отсутствия недопустимых данных в базе данных, вы должны обрабатывать это с помощью валидаций ActiveRecord (например, validates_presence_of :user_id
) или определять свой собственный метод validate
в модели. (http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html) Это должно помешать сохранению, если ваши данные недействительны. Если вы действительно параноик, вы можете добавить некоторые ограничения в вашу базу данных. Проверьте документы ActiveRecord::Migration
о том, как настроить уникальные индексы и другие ограничения базы данных в ваших миграциях.
Кроме того, по моему опыту, вы хотите избежать использования любого пользовательского метода сохранения или создания, когда это возможно. Если вы повторно реализуете функциональность, включенную в ActiveRecord, вы в конечном итоге заплатите цену в будущем. http://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist есть что сказать по этому поводу.