memo_app

(3)Railsで簡単なメモアプリを作ってみる

masahide

14年間務めた大手自動車会社を退職 TECH CAMP短期集中コース受講 地元の自社、受託開発企業へ就職 やればできるを発信しています。

前回の作業で新規投稿フォームとデータベースが作成できました。今回は編集機能の追加をしていきたいと思います。流れとしては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が確認テストに編集できることが確認できました。次回は投稿を削除する機能を追加したいと思います。

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

-memo_app
-, , , ,

© 2020 まさブログ Powered by AFFINGER5