結論
以下のコードで、単に入力された値を送信することができます。CSRF対策も含まれています*1。
<%= form_with url: hogehoge_path, local: true do %> <input name='foobar'> <%= button_tag 'ボタンに表示される名前', type: 'submit' %> <% end %>
上記の erb を書くと、以下のようにフォームが表示されます。
テキストボックスに文字を入力してボタンをクリックすると、params
として次の値が渡ります。ここでは、フォームの中身として「おはようございます」という言葉を入力したとします。
{"authenticity_token"=>"IbZ+3TYfHJB7EbPvbxknHJ4JjdunJX6rgSZsmqAjq6nSWaSRhwUGmjldTq3ZLw399NRQEgMhVo8we2SyCVVbbg==", "foobar"=>"おはようございます", "button"=>"", "controller"=>"home", "action"=>"create"}
"controller"=>"home"
となっていますが、これは私が命名したものです*2"button"
の値が空っぽですが、この値は例えばvalue: 'fugafuga'
のようにしてvalue
をbutton_tag
の引数に追加すれば params で取得できます。input
におけるname
は必須ですname
がないと params に渡って来ないです
local: true
は「最低限のコード」かどうか迷ったのですが、入れました*3
補足
- 上記は View のコードなので、動作させるためには Controller および routes.rb を適切に記述する必要があります
- 具体的には以下のとおりです
- Controller にフォームの送信のデフォルトのアクションは
create
なので、create
アクションを記述すること - routes.rb にフォームの送信先を定義すること*4
- Controller にフォームの送信のデフォルトのアクションは
- 具体的には以下のとおりです
- 小さい形で動かすことができれば、あとは引数を追加していったりフォームの項目を増やしていったりすることは難しくないかと思います
考察
もっと単純にできるかもしれません*5。