#まえがき
こちらでは、投稿ページ制作後を前提に"投稿内容を編集"の作業を忘却録として残します。
#投稿内容を編集する機能を作る
##編集ページの作成
routes・controllers・view の3点に、編集ページを新規作成してください
また、ページ作成には
・コントローラー名→ form
・アクション名→ Edit
で設定してます。
(例)
Rails.application.routes.draw do
get '/' => 'form#index'
get '/form' => 'form#form'
post "form/create" => "form#create"
get "form/:id/edit" => "form#edit" ⇦これ
get "form/:id" => "form#post"
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
<h1>編集ページ</h1>
class FormController < ApplicationController
def index
@forms = Form.all
@forms = Form.all.order(created_at: :desc)
end
def post
@forms = Form.find_by(id: params[:id])
end
def form
@forms = Form.find_by(id: params[:id])
end
def create
@forms = Form.new(content: params[:content])
@forms.save
@forms = Form.new(title: params[:title])
@forms.save
redirect_to("/")
end
def edit ←ここから
end ←ここまで
end
routesのpostは、フォームデータの取得を行う時に使います。
新規ページ作成ではgetで設定してください。エラーの原因になってしまいます。
##編集ページでの初期値設定(textarea・input)
###controllers
・
・
・
def edit
@forms = Form.find_by(id: params[:id]) ←ここ
end
editアクションに @forms = Form.find_by(id: params[:id]) を設定して、URLと同じidのデータを取得させます。
###views
<h1>編集ページ</h1>
<div class="form">
<div>
<textarea><%= @forms.content %></textarea> ←ここ
<input type="submit" value="保存"> </div>
</div>
<%= @forms.content %> により、入力の初期値を設定しています。
##編集内容の保存
###コントローラーにアクションの追加
フォームから値を受け取るので、routesでは get ではなく post で実行してください。
post "form/:id/new" => "form#new"
###リダイレクトの設定
アクションにフォームから値を受け取る準備をしたら、submitを押した後にリダイレクトさせる必要があります。
def new
redirect_to("/")
end
redirect_to("/") を利用してリダイレクト設定を行います。 / は私が任意で設定しているので個人でアレンジしてください。
##Viewsで送信先の指定する
先により フォームからの値の取得・リダイレクト を行いました。
ここでは、Viewsで送信先を指定します。
<h1>編集ページ</h1>
<%= form_tag("/posts/#{@post.id}/new") do %> ←ここ
<div class="form">
<div>
<textarea><%= @forms.title %></textarea>
<textarea><%= @forms.content %></textarea>
<input type="submit" value="保存"> </div>
</div>
<% end %> ←ここ
↓ 詳細
<%= form_tag("/posts/#{@post.id}/new") do %>
フォームタグ
<% end %>
↑により、送信先が指定されます。
##投稿内容の更新を行う
データーベースからデータを取得する必要があります。
取得アクションは、アクション・name属性の追加で行えるので、実行しましょう。
###Viewでname属性を指定する
<h1>編集ページ</h1>
<%= form_tag("/posts/#{@post.id}/new") do %>
<div class="form">
<div>
<textarea name="content"><%= @forms.content %></textarea> ←ここ
<input type="submit" value="保存"> </div>
</div>
<% end %>
###コントローラーで params と save で指定
params では、送られてきたデータを保持するオブジェクトを作成できます。
def update
@forms = Form.find_by(id: params[:id])
@forms.content = params[:content]
@forms.save
redirect_to("/")
end
#あとがき
ここまで読んでいただき、ありがとうございました。
初期値の設定などの処理が理解できるまで、少し時間がかかりそうですが地道に理解を深めたいと思います。
また、ここの紹介だけでは"投稿ページへのリンク"など詳細を省いてしまってるので、自作されるかたは設定することをおすすめします。
#参考リンク
#Myリンク
また、Twitter・Portfolio のリンクがありますので、気になった方は
ぜひ繋がってください。プログラミング学習を共有できるフレンドが出来るととても嬉しいです。