うさぎのイラスト

ネットアンサー55備忘録

web技術を書いていきます

form_withの使い方

-2023年02月27日-

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

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

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

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

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

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

このようにルーティングでネストをしているときの記述を示します。
1Rails.application.routes.draw do
2  resources :articles do
3    resources :comments, only: [:create, :destroy, :edit, :update]
4  end
5end
コメントは必ずいずれかの記事に紐づいているので、どの記事のコメントなのかという情報(親情報)が必要になります。
1//コントローラー
2def new
3  @article = Article.find(params[:article_id])
4  @comment = Comment.new
5end
6 
7def edit
8  @article = Article.find(params[:article_id])
9  @comment = Comment.find(params[:id])
10end
1//ビューファイル
2<%= form_with model: [@article, @comment] do |form| %>
3  <%= form.text_field :text %>
4  <%= form.submit %>
5<% end %>