Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

submitの挙動はモデルが保存済みかどうかで決まる

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

実際コワイ実装ですね...三項演算子のネストってコーディング規則への宣戦布告では(震え声

*1:詰みかけました