前回の作業で新規投稿フォームとデータベースが作成できました。今回は編集機能の追加をしていきたいと思います。流れとしてはnew,createのアクションと同じです。
前回の作業の振り返り
- コントローラーにnewアクション追加
- routes.rbにパスを追記&rails routesで確認
- new.html.erbファイルを作成
- 上記ファイルにフォームを作成
- コントローラーにcreateアクション追加
- routes.rbにパスを追記&rails routesで確認
- 投稿できるか確認
editアクションの追加
editアクションは7つのアクションのうちの一つ『編集』ができるアクションです。
app/controllers/memo_controller
def edit
@post = Post.find(params[:id])
end
こちらをprivateより上に追記してください。
config/routes.rb
Rails.application.routes.draw do
root to: "memo#index"
resources :memo, only: [:new, :create, :edit, :update]
end
editとupdateを追加します。

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
こちらは参考にしたQiita記事です。
https://qiita.com/murata0705/items/52538c08778c39a91ec2
updateアクションの追加
app/controllers/memo_controller.rb
def update
post = Post.find(params[:id])
post.update(post_params)
redirect_to root_path
end
ちょっと解説
1行目:@postにPostテーブルから一つのレコードを取得
2行目:変更した値を更新
3行目:トップページへ遷移
これで編集機能は追加できたと思います。



こんな感じで、test4が確認テストに編集できることが確認できました。次回は投稿を削除する機能を追加したいと思います。
ここまで読んでいただきありがとうございました。おかしなコードがあればコメントにお願いします。