【Ruby on Rails】Ruby on Rails 5.1のform_withでハマったメモ

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

Ruby on Railsを久しぶりに使って、form_forやform_tagがform_withに統合されたとのことで試したら、昨晩からハマってしまった。
ソースコードは次のようなもの。form_withとform_tag を比較している。

class HeloController < ApplicationController

    def index
        @title = "Viewサンプル"

        if request.post? then
            @value = params["input1"]
        else
            @value = 'defauult'
        end
    end
    
    def other
        redirect_to action: :index, params: {'msg': 'from other page'}
    end

    def index2
    end
end
<h1><%= @title %></h1>
<p><%= @msg %></p>
<p><%= @value %></p>

<%= form_with url: helo_index_path do |form| %>
    <%= form.text_field :input1 %>
    <%= form.submit %>
<% end %>

<%= form_tag(controller: "helo", action: "index") do %>
    <%= text_field_tag("input1") %>
    <%= submit_tag("Click") %>
<% end %>

次のように表示される。

見かけ上は問題なさそう。
ただ、下のform_tagの方はフォームがsubmitされるのに対して、上のform_withの方はsubmitされない。見かけ上は。なぜか。

答えは、form_withの方はXMLHttpRequestでデータを取得してきていたからというオチ。

Webプログラミング初心者なためXMLHttpRequestもよくわかっていなかったのだけれど、ajaxを使ってページを遷移することなくURLからデータを読み出す方法らしい。

ってことは、現段階ではform_withはform_tagやform_forのそのままの統合じゃないってこと?まだ理解が不足しているため、分かり次第追記することにする。