初めに
- 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側に送られる。