form_withがしてくれる役割は2つです。

 

前回からの続きになりますが、オリジナルアプリケーションに追加実装中に、もう一度

復習したいと思ったところをシェアしていきたいと思います。

 

form_with です。

すごーーーーーーーーーく重要です。

 

役割は2つあります。

1、フォームを作ってくれる。

2、受け取ったインスタンスによって、次のアクションを動かしてくれる。

 

コントローラーのnewアクションで空のインスタンス変数を生成した場合は、new.html.erbに運ばれ、自動でcreateアクションに運ばれ保存してくれます。

 

app/controllers/posts_controller.rb

def new
@post = Post.new
end

 

app/views/posts/new.html.erb

<div class="items-sell-main">
<h2 class="items-sell-title">ニュージーランドの投稿の情報を入力</h2>
<%= form_with(model: @post, local: true) do |f| %>

<%= render 'shared/error_messages', model: f.object %>
 
<div class="img-upload">
<div class="weight-bold-text">
画像
<span class="indispensable">必須</span>
</div>
<div class="click-upload">
<p>
クリックしてファイルをアップロード
</p>
<%= f.file_field :image, id:"item-image" %>
</div>
</div>

 

 

またはコントローラーのeditアクションで、中身の入ったインスタンス変数を生成した場合は自動でupdateアクションに運ばれ編集できます。

 

app/controllers/posts_controller.rb

def edit
@post = Post.find(params[:id])
end

app/views/posts/edit.html.erb

<div class="items-sell-main">
<h2 class="items-sell-title">投稿の情報を入力</h2>
<%= form_with(model: @post, local: true) do |f| %>

<%= render 'shared/error_messages', model: f.object %>
 
<div class="img-upload">
<div class="weight-bold-text">
画像
<span class="indispensable">必須</span>
</div>
<div class="click-upload">
<p>
クリックしてファイルをアップロード
</p>
<%= f.file_field :image, id:"item-image" %>
</div>
</div>

 

 

URLなど記述しなくても、空のインスタンスか、中身があるインスタンスかで、

自動で次のアクションに運んでくれるとっても便利なform_with。

 

ちなみにフォーム自体はどちらも同じものを共有できます。

 

すごく重要なところなので、何度も使って頭に叩き込んでいきたいです。