Posted at

form_tagをform_forに書き換える

初めまして!

Rails初学者が初めてQiitaで書きます!


form_forってどうやって書いたらいいの?


アプリを作成する際に苦戦したので備忘録として記事を残しておきます。


form_for基本形

<%= form_for (modelobject, option) do |f| %>

フォームコントロールの設定
<% end %>

これ書いたらformが作成されると思っていましたが、うまくいきません。


まずはビューの部分を記述する



new.html.erb

<div class="contents row">

<%= form_for @post do |form| %>
//@postにフォームコントロール内で入力する値を入れる//
<h5>タイトル</h5>
<%=
form.text_field :content, placeholder: 'content' %>
//ブログのタイトルを入力する為のtext_field
<h5>本文</h5>
<%= form.text_field :content, placeholder: 'content' %>
  /
/ブログの本文を入力する為のtext_filed
<%= form.submit "SENT" %>
 //送信ボタン
<% end %>
</div>


次にcontrollerを編集する



posts_controller.rb

class PostsController < ApplicationController

before_action :move_to_index, except: [:index, :show]
def new
@post = Post.new
//新規作成された値は@postに入れる
end
//~省略~


これでform_for内で入力した値は@postに渡されます!

新規作成のフォームは完成したので次は編集する時のフォームの書き方。


編集のビュー部分の作成



edit.html.erb

<div class="contents row">

<%=form_for @post, url => {action: 'update'} do |form|%>
//form_forのupdateアクションを明示する為にaction:を指定
  <h5>
タイトル</h5>
<%= form.text_field :title, placeholder: 'title:最大文字数20文字まで' %>
<h5>本文</
H5>
<%= form_text_field :content. placeholder 'content'%>
<%=
form.submit "SENT" %>
<% end %>
</div>


次にcontrollerを編集する



posts_controller.rb

class PostsController < ApplicationController

before_action :set_post, only: [:edit, :show]
//共通のアクションはcallbackする為、before_action内に設定
〜省略〜
def show
end

def edit
end

private

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

def post_params
params.require(:post).permit(:content, :title)
end
end


以上でform_forでフォームの新規作成と編集ができるようになりました!


最後に



筆者について

TEXH::EXPERT渋谷校の夜間クラスで4月からRuby・Railsの学習をしています。

記載内容に不備・不足があればご指摘いただけると幸いです。

至らぬ点ばかりですので、改善点がありましたらどんどんご指摘下さい!