投稿内容を保存するために(createアクション)

初めに

  • Progateで学んだ内容で自分が躓いた内容を理解し効率よく学ぶため、かつ備忘録として記事を書いていこうと思います

結論

  • @post =Post.newという空箱を用意し、@post.saveで投稿内容が保存される

完成物

HTML

<div class="main posts-new">
  <div class="container">
    <h1 class="form-heading">投稿する</h1>
    <div class="form">
     <%= form_tag('/posts/create', method: :post) do %>
      <div class="form-body">
        <textarea name ="content"></textarea>
        <input type="submit" value="投稿">
      </div>
     <% end %>
    </div>
  </div>
</div>
  • 入力フォームはform_tagを利用する

  • 転送先はcreateアクションにする('/posts/create', method: :post)

  • textareaタグにname属性を指定して入力データを送信する。name属性の値をキーとしたハッシュがRails側に送られる。

posts_controller

class PostsController < ApplicationController
  def index
    @posts = Post.all.order(created_at: :desc)
  end
  
  def show
    @post = Post.find_by(id: params[:id])
  end
  
  def new
    @post = Post.new
  end
  
  def create
    @post = Post.new(content: params[:content])
   if @post.save
     redirect_to("/posts/index")
   else
     render("posts/new")
   end
  end
  
end
  • @post = Post.new(content: params[:content])では送られた投稿データにPost.newという空箱を用意し、その空箱には先ほど入力した  contentカラムの内容を入れておく

  • params[:content]は{content:"お肉美味しい"}というハッシュが入っている

  • if文では@postが保存されとすると一覧ページへ遷移する。もし保存されなければ投稿ページに戻ると記述する

結語

  • createアクションで保存するためには@post = Post.newのような空箱が必要

  • textareaタグにname属性を指定して入力データを送信することで、name属性の値をキーとしたハッシュがRails側に送られる。