うさぎのイラスト

ネットアンサー55備忘録

web技術を書いていきます

form_withの使い方

-2023年02月27日-

入力された情報をデータベースに保存しない時

<%= form_with url: "パス" do |form| %>
  <!--フォーム内容 -->
<% end %>

入力された情報をデータベースに保存する時

modelオプションを使う場合、form_withの引数にはモデルクラスのインスタンスを指定します。 モデルクラスのインスタンスとは保存したいテーブルのクラスのインスタンスのことです。 今回はusersテーブルに新たにレコードを作成したいので、コントローラー側で下記のように記述します。
def new
  @user = User.new
end
<%= form_with model: @user do |form| %>
  <%= form.text_field :name %>
  <%= form.submit %>
<% end %>
editアクションの時は下記のようになります。すると、type="hidden"の要素にvalueとしpatchが生成されます。

コントローラーで、モデルインスタンスの値が『空』なのか『それとも元々』
def edit
  @user = User.find(params[:id])
end

ネストをしているときの記述

このようにルーティングでネストをしているときの記述を示します。
Rails.application.routes.draw do
  resources :articles do
    resources :comments, only: [:create, :destroy, :edit, :update]
  end
end
コメントは必ずいずれかの記事に紐づいているので、どの記事のコメントなのかという情報(親情報)が必要になります。
//コントローラー
def new
  @article = Article.find(params[:article_id])
  @comment = Comment.new
end

def edit
  @article = Article.find(params[:article_id])
  @comment = Comment.find(params[:id])
end
//ビューファイル
<%= form_with model: [@article, @comment] do |form| %>
  <%= form.text_field :text %>
  <%= form.submit %>
<% end %>