【Rails】で投稿機能を作る
作り方流れ
- 投稿フォームを作る
- 投稿フォームにデータ入力し、データを送信
- 送信内容をDBに保存
- DBに保存した後、どこかの指定したviewページへ飛ばす(リダイレクト)
①投稿フォームを作る
このように作りたいと思います。
view/admin/items/new.html.erb
<%= form_with model: @items, url: admin_items_path do |f| %>
<h4>タイトル</h4>
<%= f.text_field :title %>
<h4>本文</h4>
<%= f.text_area :body %>
<%= f.submit '投稿' %>
<% end %>
②ルーティング確認
newアクション
とcreateアクション
の記述が必要です。
コントローラー作成の時にnewアクション付きで作成していれば、newはすでにあると思います。
しかし、データ保存を行うcreateアクションがない為、追加で書く必要があります。
config/routes.rb
Rails.application.routes.draw do
get 'items/new'
post 'items' => 'items#create' #ここを追記します
:
:
end
resouresでまとめたら楽だと思います。(下記参照)
config/routes.rb
Rails.application.routes.draw do
resources :item, only: [:new, :index, :edit, :destroy, :show, :update, :create]
:
:
end
③コントローラー
newとcreateの部分に書いていく必要があります。
class ItemsController < ApplicationController
def new
@item = Item.new #投稿を新規作成するためのフォーム
end
def create
@item = Item.new(item_params) # データを受け取り新規登録するためのインスタンス作成
@item.save # データをデータベースに保存するためのsaveメソッド実行
redirect_to admin_items_path # itemのindexページ画面へリダイレクト
end
private
# ストロングパラメータ
def item_params
params.require(:items).permit(:title, :body)
end
end
大まかにこんな感じかなぁ…