あしあと

明日の自分への情報発信

Railsの学習(3日目)

はいrails3日目〜。

 

SNSへの投稿内容を編集する

投稿を編集するには、①編集したい投稿を取得し、②その投稿のcontentの値を上書きした後に、③データベースに保存する。
図のようにpost.content = "新しい値"とすることで、投稿のcontentの値を上書きすることができる。

 

f:id:keropp1234:20200118065355p:plain

 

編集データを保存すると作成日は初投稿のままだが更新日は自動で更新される。

f:id:keropp1234:20200118065543g:plain

 

destroy 〜投稿内容を削除する〜

削除したい投稿内容に対して「destroy」メソッドを使うことでデータベースから削除することができる。

f:id:keropp1234:20200118070258p:plain

 

投稿編集ページを作成する。

どの投稿ページを編集するのか判別するために、投稿編集ページのURLにはidを使用することにする。これにより2番目の投稿を編集するときは/posts/2/editというページとなる。

また、postsコントローラ内にeditアクションを作成し、対応するビューとして、edit.html.erbも作成しましょう。

f:id:keropp1234:20200118070708p:plain

 

投稿詳細ページから投稿編集ページにアクセスできるように、以下のようなeditアクションのURLを指定して編集リンクを作成する。

f:id:keropp1234:20200118071048p:plain

 

投稿の編集をするためには編集フォームには投稿した内容を初期値として設定する必要がある。

f:id:keropp1234:20200118203224p:plain

 

editアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値(=投稿の内容)を初期値に設定する。

f:id:keropp1234:20200118203235p:plain

 

updateアクションはフォームの値を受け取るので、ルーティングを
getではなく、postにする必要がある。
また、特定のidの投稿を更新するので、URLにidを含むようにする(左の画像でposts/:id/updateとなっている)。
投稿を編集した後は投稿一覧ページにリダイレクトさせるので、ビューは
不要。

f:id:keropp1234:20200118203746p:plain

 

フォームで入力した内容をデータベースに保存するためには、フォームのデータをupdateアクションに送信する必要がある。
新規投稿ページを作ったときと同様に、form_tagメソッドを用いて、送信先を指定する。画像の送信先URLがそれである。

f:id:keropp1234:20200118203753p:plain

 

情報の更新

まずは更新する投稿データをデータベースから取り出す。
updateアクションのURLにはidが含まれているので、そのidを用ればデータベースから投稿データを取得できる。

f:id:keropp1234:20200118222901p:plain

 

次に、<textarea>タグにname属性を指定し、フォームの入力内容が変数paramsに代入されてupdateアクションに送信されるようにします。
updateアクションでは、フォームから送信された値をparams[:content]で
受け取り、@post.content = params[:content]で投稿データの内容を更新します。

f:id:keropp1234:20200118222912p:plain