LoginSignup
1
1

More than 1 year has passed since last update.

【Rails / erb】form_tagをform_forに書き換える

Last updated at Posted at 2019-07-10

初めまして!
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の学習をしています。
記載内容に不備・不足があればご指摘いただけると幸いです。
至らぬ点ばかりですので、改善点がありましたらどんどんご指摘下さい!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1