(3)Railsで簡単なメモアプリを作ってみる
前回の作業で新規投稿フォームとデータベースが作成できました。
投稿 → (2)Railsで簡単なメモアプリを作ってみる
今回は編集機能の追加をしていきたいと思います。
流れとしてはnew,createのアクションと同じです。
前回の作業解説
・コントローラーにnewアクション追加
・routes.rbにパスを追記&rails routesで確認
・new.html.erbファイルを作成
・上記ファイルにフォームを作成
・コントローラーにcreateアクション追加
・routes.rbにパスを追記&rails routesで確認
・投稿できるか確認
editアクションの追加
editアクションは編集ができるアクションです。
ここに簡単にまとめているので、気になる方はどうぞ
Rails7つのアクションとは?
app/controllers/memo_controller
def edit
@post = Post.find(params[:id])
end
こちらをprivateより上に追記してください。
confi/routes.rb
resources :memo, only: [:new, :create, :edit, :update]
routes.rbにeditとupdateを追加します。
http://localhost:3000/rails/info/routes
edit,updateへのパスが通ってるのが確認できました。
編集フォームの作成
app/views/memo/edit.html.erb
こちらのファイルは手動で作成してください
<h1>編集ページ</h1>
<%= @post.content %>
<%= form_tag("/memo/#{@post.id}", method: :patch) do %>
<input type="text" name="content">
<input type="submit" value="編集する">
<% end %>
<%= link_to 'トップページ', '/' %>
ほとんどnew.html.erbと同じですが、所々変わっています。
<h1> 編集ページ
題名を変更しました。
<%= form_tag("/memo/#{@post.id}", method: :patch) do %>
ここは少し苦戦していました。
pathとHTTPメソッドを書かないといけないので
ここをnew.html.erbと同じにしてしまうと、新規投稿扱いになります。
rails routesに記載されているupdateメソッドを記述する必要がありました。
PATCHとPUTの違い
"更新"でイメージするような、リソースの一部を更新する処理はPatch
ファイルアップロードのような、指定したURLにあるリソースをまるごと置換えるような処理はPut
updateアクションの追加
app/controllers/memo_controller.rb
def update
post = Post.find(params[:id])
post.update(post_params)
redirect_to root_path
end
こんな記述を書きました。
@postにPostテーブルから一つのレコードを取得
変更した値を更新
トップページへ遷移
これで編集機能は追加できたと思います。
こんな感じで編集が確認できました。
次回は投稿を削除する機能を追加したいと思います。
ここまで読んでいただきありがとうございました。
おかしなコードがあればコメントにお願いします。