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 %>