読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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:詰みかけました