見出し画像

(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

スクリーンショット 2020-06-25 10.31.13

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テーブルから一つのレコードを取得
変更した値を更新
トップページへ遷移

これで編集機能は追加できたと思います。

スクリーンショット 2020-06-25 10.37.31

スクリーンショット 2020-06-25 10.38.30

スクリーンショット 2020-06-25 10.38.38

こんな感じで編集が確認できました。
次回は投稿を削除する機能を追加したいと思います。

ここまで読んでいただきありがとうございました。
おかしなコードがあればコメントにお願いします。

この記事が気に入ったらサポートをしてみませんか?