RubyonRails:投稿の編集・削除機能実装 #Progate #RubyonRails5 IV
投稿の編集・削除機能の実装
流れの仮説を立てる
A.編集機能、ページ作成
・編集ページ作成
開いたらテキストエリアに現在のcontentが入る
・投稿ボタンでデータを編集アクションに渡す
・アクション内で前の値呼び出し→新しい値を格納andセーブ
・ルートは個別投稿ページへ。
B.削除機能の実装
・削除ボタン→削除アクションにデータを渡す
・削除アクション内で値を更新(デリートメソッドみたいなの)
・ルートは投稿一覧ページ。
<補足>データベースの更新
データ読み出し→更新→保存
post = Post.find_by(id: ?)
post.content = "新しい文章"
post.save
<補足2>レコードの消し方
データ呼び出し→削除
post = Post.find_by(id: ?)
post.destroy
editアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値(=投稿の内容)を初期値に設定する。
def edit
@post = Post.find_by(id: params[:id])
end
<textarea><%= @post.content %></textarea>
※ #{@post.content}はrubyファイル内で使う。
全体の流れ
・投稿編集ページ作成(showビューにリンク挿入)
・フォーム作成
フォームの初期値を現在の投稿内容に
・受け取り、更新機能作成
updateアクションを用意(ルートも。リダイレクトするためビューは不要)
編集完了ボタンの送信先をupdateアクションに設定
<%= form_tag("/posts/#{@post.id}/update) do %><% end %>
・updateアクションの中身を作成
def update
redirect_to("/posts/index")
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
@post.save
end
・textareaにname属性を付与
・投稿削除機能作成
destroyアクション、ルート
showビュー内にリンクを作成 link_to() 、転送方法の指定{method: "post"}
destroyアクションの定義
def destroy
@post = Post.find_by(id: params[:id])
@post.destroy
redirect_to(...)
end