Tayatter

タヤのつぶやき

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