[Rails入門] editアクションとupdateアクションでデータ更新!

Ruby on Railsを勉強している人

editアクションとupdateアクションについて知りたいな!

上記のようなお悩みを持っている方はいないでしょうか?

この記事は上記のような疑問を解消するものとなっています。

この記事でお話すること
  • index.html.erbの修正
  • edit.html.erbの作成
  • controllerにeditアクション・updateアクションを追加
  • ルーティング設定
  • Ruby on Railsを学ぶことができるオススメの教材

Ruby on Railsでの「データの更新方法が分からない」、「データの更新方法をもっと知りたい」などお悩みを持っている方はいないでしょうか?

このページではeditアクションを用いてデータ編集、updateアクションを用いてデータ更新を行っていきたいと思います。

editアクションは「編集」、updateアクションは「更新」という意味です。

editアクションは、編集するモデルを特定し、編集された内容を受け取り、updateアクションに内容を送信します。

一方、updateアクションは、editアクションから受け取った内容を元にデータベースを書き換えます。

気になる方は是非、最後まで読んで頂けたら幸いです。

1.index.html.erbの修正

このページはWebアプリケーションの作成、Modelの作成、indexアクションの作成を終えているという前提でお話を進めていきます。

データ更新はフォームを利用して行います。

フォームには既にデータベースに保存されているデータが表示されており、データベースに保存されているデータをフォームから送信された値に書き換えて保存するという流れになります。

そのため、データの新規登録とは処理の仕方が異なってくることに注意が必要になります。

まず始めに、編集ページに遷移するための編集リンクをトップページに設置しましょう。

それでは、「index.html.erb」を開き、以下のようにソースコードを書き換えて下さい。

今回、追記した箇所は「<th>編集</th>」と「<td><a href=”/posts/edit/<%= post.id %>”>EDIT</a></td>」です。

このように追記することでテーブルの右側に「EDIT」というリンクが表示され、編集ページに移動することができます。

例えば、idが2の場合、「/posts/edit/2」でアクセスすることができます。

データの更新はeditアクションで行い、上記のような形でアクセスしたら、送信されてきたidをもとにデータ検索し、内容を表示させるという流れになります。

もっと詳しく知りたい方は是非「Ruby on Rails 6 超入門」をご覧ください!

Ruby on Rails 6 超入門」は入門者向け書籍でRailsの経験がなくてもわかりやすい本となっています!

 




2.edit.html.erbの作成

トップページから編集ページに遷移することができるようになったので「edit.html.erb」を作成しましょう。

「edit.html.erb」を以下のように書き換えましょう。

それでは上記のソースコードを詳しく見ていきましょう。

データの更新は「form_for」というフォームヘルパーを作成してフォームを作成しています。

「form_for」の一つ目の引数はモデルのインスタンスの指定、二つ目の引数はフォームの送信先の指定を行っています。

次に用意したtext_fieldにどのように値が表示されているのか見ていきましょう。

form_forで@postオブジェクトを設定しているので、@postに保管されている値がtext_fieldに値として表示される仕組みになっています。

そのため、取り出したデータの値を設定するソースコードを記述しなくて済んでいます。

もっと詳しく知りたい方は是非「Ruby on Rails 6 超入門」をご覧ください!

Ruby on Rails 6 超入門」は入門者向け書籍でRailsの経験がなくてもわかりやすい本となっています!

 




3.controllerにeditアクション・updateアクションを追加

編集画面が出来たので、controllerにeditアクションとupdateアクションを追加しましょう。

それではposts_controller.rbにeditアクションとupdateアクションを追記しましょう。

まず始めにeditアクションを見ていきましょう。

編集画面にアクセスする時、「posts/edit/id」という形でid番号がパラメータとして追加されています。

そして、このid番号をもとにデータを検索し、「edit.html.erb」に表示させるという仕組みになっています。

次にupdateアクションを見ていきましょう。

updateアクションはフォームの値が送信された時の処理を行います。

updateアクションの中身は以下のようになっています。

送信されてきたid番号をもとに更新するデータをモデルのオブジェクトとして取り出し、オブジェクトの値を更新するという流れになっています。

データの検索はeditアクションの時と同じく、「Post.find(params[:id])」で行うことができます。

そして、データの更新は「@post.update(post_params)」で行っています。

paramsを引数に指定してupdateを呼び出すと、データをparamsで送られてきた値に更新して保存してくれます。

注意

editアクションとupdateアクションは「private」より上に記述するようにしましょう。

「private」より下にあるメソッドはすべて内部でのみの利用となり、外部から利用できなくなってしまい、エラーの原因となってしまいます。

もっと詳しく知りたい方は是非「Ruby on Rails 6 超入門」をご覧ください!

Ruby on Rails 6 超入門」は入門者向け書籍でRailsの経験がなくてもわかりやすい本となっています!

 




4.ルーティング設定

最後にルーティング設定を行っていきましょう。

route.rbのファイルを開き、以下のソースコードを追記しましょう。

上記を見て分かるかと思いますが、編集を行う時は「people/edit/:id」という形でアドレスを指定します。

ここで一つ注意点があります。

データ更新を行う時はPATCH送信で行う必要があります。

そのため、POST送信ではなく、PATCH送信で行うようにしましょう。

これでルーティング設定が終わりました。

それではサーバーを起動して投稿編集をしてみましょう。

「EDIT」をクリックすると画面がしっかりと表示されて、内容を更新できるようになりました。

もっと詳しく知りたい方は是非「Ruby on Rails 6 超入門」をご覧ください!

Ruby on Rails 6 超入門」は入門者向け書籍でRailsの経験がなくてもわかりやすい本となっています!

 




5.Ruby on Railsを学ぶことができるオススメの教材

Ruby on Railsを学習している皆様にオススメの教材をご紹介させていただきます。

現場で使える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド」はRuby on Railsの学習を一通り終えてある程度知識を身につけた方にオススメしたい本です。

現場で使える Ruby on Rails 5速習実践ガイド」は現場で実際にどのように使われているのかという視点も交えて解説されています。

そのため、初心者の方が次のステップに進むために最適な本となっていますので、オススメです。

これらの本で是非学習を進めてみてはいかがでしょうか?

レベル別におすすめの本も紹介していますので、どのような本がオススメか知りたい方はこちらもご覧になって下さい。

Udemy

Udemy(ユーデミー)」ではRuby on Railsを学ぶことができる講座を多数取り扱っています。

Udemy(ユーデミー)」では頻繁にセールが行われており、時には半額以下(最大90%OFF)になることも。

以下の記事でRuby on Railsを学ぶことができるオススメの講座をまとめていますので、よかったらご覧になって下さい。

プログラミングスクール

Ruby on Railsを学ぶことができるプログラミングスクール
  • TechAcademy:通過率10%の選考に合格した現役エンジニアから学べるオンラインに特化したプログラミングスクール。
  • DMM WebCamp:講師に質問し放題で効率的に学習。短期間のカリキュラムで確実に結果が出る。専属コーチ・アドバイザーが卒業まで伴走。
  • CodeCamp:あなたの目的に合わせた、最適な学習カリキュラム。
  • Tech Camp:未経験でも挫折せずテクノロジースキルが身につく。

それぞれ無料体験も行っているので、どのようなものか試してみるのもいいでしょう。

無料体験を受けているうちに自分に合うサービスかどうか確認することができます。

以下の記事で各プログラミングスクールをまとめているのでこちらもよかったらご覧になってください。




6.ポイント

データ更新の書式

<モデルのインスタンス>.update(<パーミッション済みのparams>)

上記のようにパーミッション済みのparamsを引数にすることでデータ更新することができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です