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">
<%= 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。
ちなみにフォーム自体はどちらも同じものを共有できます。
すごく重要なところなので、何度も使って頭に叩き込んでいきたいです。