formタグのsubmitは対象モデルが保存済みかどうかを読み取りに行き、
自前でcreateかupdateかを判定してくれます。
確認フォームのような画面を実装する場合、この点を意識しないと勝手にupdateになって詰みます。*1
この魔法を実現している部分がこちら
## line 1861 def submit_default_value object = convert_to_model(@object) key = object ? (object.persisted? ? :update : :create) : :submit model = if object.class.respond_to?(:model_name) object.class.model_name.human else @object_name.to_s.humanize end defaults = [] defaults << :"helpers.submit.#{object_name}.#{key}" defaults << :"helpers.submit.#{key}" defaults << "#{key.to_s.humanize} #{model}" I18n.t(defaults.shift, model: model, default: defaults) end
実際コワイ実装ですね...三項演算子のネストってコーディング規則への宣戦布告では(震え声
参考もと
http://railsdoc.com/references/submit
https://github.com/rails/rails/blob/41a7c443a687f0fa3d63620773790ea3b9741e00/actionview/lib/action_view/helpers/form_helper.rb
*1:詰みかけました