rails6 form_withを使ってpostする

rails6 form_withを使ってpostする

rails6でform_withを使ってpostするまでの手順を記述してます。Railsのバージョンは6.1.1を使用してます。

環境

  • OS CentOS Linux release 7.9.2009 (Core)
  • Ruby 2.7.2
  • Rails 6.1.1
  • rbenv 1.1.2-40-g62d7798

controller作成

まずは、「disp」という名前でcontrollerを作成します。

rails g controller disp

「app/controllers」配下に「disp_controller.rb」が作成されます。

view作成

「app/views/disp」配下に「index.html.erb」を作成します。

form_withでpost

「index.html.erb」を、form_withでpostするため以下のように編集します。

<%= @str %>

<%= form_with(url: disp_path) do |form| %>
    <%= form.text_field :str %>
    <%= form.submit %>
<% end %>

「disp_controller.rb」でパラーメーターを受け取るため、以下のように編集します。初期値を「”hello world”」にするため、三項演算子を使用してます。

class DispController < ApplicationController
  def index
    # params[:str]でパラメーターを受け取る
    @str = params[:str] ? params[:str] : "hello world"
  end
end

「config」配下にある「routes.rb」にも以下を追加しておきます。

post "disp", to: "disp#index"

これでrailsを起動すると

rails s

ブラウザから http://localhost:3000/disp にアクセスすると、初めは「hello world」が表示され、form_withで作成したformから入力した値が表示されていると思います。

form_with書き方

form_withは、カッコを省略して記述することもできます。

<%= @str %>

<%= form_with url: disp_path do |form| %>
    <%= form.text_field :str %>
    <%= form.submit %>
<% end %>

また、コントローラー名とアクション名を直接記述することもできます。

<%= @str %>

<%= form_with url: { controller: "disp", action: "index" } do |form| %>
    <%= form.text_field :str %>
    <%= form.submit %>
<% end %>

formにclassやsizeを指定することも可能です。

<%= @str %>

<%= form_with url: { controller: "disp", action: "index" } do |form| %>
    <%= form.text_field :str, class: "form-control", size: 10 %>
    <%= form.submit %>
<% end %>

modelとしても使用できます。

<%= form_with model: @disp do |f| %>
    <%= f.text_field :str %>    
    <%= f.submit "送信" %>
<% end %>

submitの表示文字も以下のように指定することが可能です。

<%= form.submit "送信" %>