newアクションとcreateアクションでのデータ新規作成方法を知りたい人
newアクションとcreateアクションでのデータ新規作成方法を知りたいな!
newアクションとcreateアクションでのデータ新規作成方法を解説するね!
newアクションとcreateアクションでのデータ新規作成方法を知っている人
上記のようなお悩みを持っている方はいないでしょうか?
この記事は上記のような疑問を解消するものとなっています。
- new.html.erbの作成
- controllerにnewアクション・createアクションを追記
- ルーティング設定
- Ruby on Railsを学ぶことができるオススメの教材
「データの新規作成方法が分からない」、「データの新規作成方法をもっと知りたい」などお悩みを抱えている方はいないでしょうか?
このページではnewアクションとcreateアクションを用いてデータの新規作成を行っていきたいと思います。
是非、最後まで読んで頂けたら幸いです。
\単月定額と比べて総額最大48,000円OFF!/
学び応援キャンペーン実施中!
コスパ最高! 月額1,980円〜利用できる!
- 侍テラコヤ ⇒ お得にRuby on Railsを学ぶ!
・コスパ最高! 月額1,980円〜利用できる!
・単月定額と比べて総額最大48,000円OFF!
・学び応援キャンペーン実施中! - Freeks ⇒ 無料説明会に申し込む!
・現役エンジニアに質問し放題のオンラインプログラミングスクール
・月額10,780円で受講し放題!
・無料説明会実施中!
- TechAcademy ⇒ 無料体験レッスンに申し込む!
・Ruby/Ruby on Railsだけでなく、Git/GitHub、HTML/CSS、Bootstrap、SQL、Heroku、Web API、Vue.jsなど幅広く学ぶことができる
・今まで得た知識をアウトプットするために自分の作りたいWebサービスを作る
・無料体験レッスン実施中!
- CodeCamp ⇒ 無料体験レッスンに申し込む!
・出品・購入機能付きフリマサイト、グルメサイト、画像投稿サイト、いいね機能、フォロー機能などを作りながらRuby on Railsを学べる
・無料体験レッスン実施中!
目次
1.new.html.erbの作成
このページはWebアプリケーションの作成、Modelの作成、indexアクションの作成を終えているという前提でお話を進めていきます。
データを新規作成する場合、フォームからデータを送信して保存するという流れになります。
今回は「new」アクションと「create」アクションを使用してデータの新規作成を行います。
「new」アクションでフォームを表示し、フォームからデータ送信すると「create」アクションでデータ保存を行うという流れになります。
では、「new.html.erb」というテンプレートを作成しましょう。
「views」の「posts」フォルダ内に「new.html.erb」という名前のファイルを作成して下さい。
以下のようにソースコードを記述しましょう。
上記では「form_for」というフォームヘルパーを使用してフォームを生成しています。
「form_for」というメソッドを詳しく見てみましょう。
form_for( モデル , url:{controller: コントローラー名 , action: アクション名} )
一つ目の引数
「form_for」の一つ目の引数はモデルのインスタンスを指定しています。
モデルのインスタンスは、newアクションメソッドでインスタンス変数として用意します。
インスタンス変数は「2.controllerにnewアクション・createアクションを追記」で用意します。
二つ目の引数
「form_for」の二つ目の引数はフォームの送信先を指定しています。
フォームの送信先はurlで指定しています。
urlの値はハッシュになっており、controllerとactionという値が用意されています。
このようにcontrollerとactionを指定することでどのcontrollerのどのactionにフォーム送信を行うのか指定することができます。
「form_for」の後はdoの後に用意されている変数に代入されるオブジェクトの中からメソッドを呼び出してフォームのコントロールを生成していきます。
ここでは「text_field」と「submit」というメソッドを呼び出しています。
Postモデルにはid、created_at、updated_atというカラムがありましたが、これらのカラムは自動的にデータが保存される仕組みになっているので、入力フォームを用意する必要はありません。
2.controllerにnewアクション・createアクションを追記
上記で「new.html.erb」というテンプレートが完成したので、controllerにnewアクションとcreateアクションを追記していきましょう。
それでは以下のように「posts_controller.rb」にnewアクションとcreateアクションを記述していきましょう。
データの新規作成はモデルクラスのcreateメソッドを使用します。
createの引数にはpost_paramsが指定されています。
post_paramsとは何なのでしょうか?
一番下にpost_paramsがありますが、このメソッドの戻り値が引数に指定されているということになります。
post_paramsの前に「private」と記載されていますが、これは何なのでしょうか。
これはメソッドのアクセス制限をするためのものとなっています。
クラス内に用意したメソッドはインスタンス作成を行えば、いつでも呼び出すことができてしまいます。
そこでprivateを使用することで、メソッドのアクセス制限を行うことができます。
次にpost_paramsの中身を見ていきましょう。
require(:post)ではparamsの中に指定の値が存在するかをチェックしています。
ここではparams[:post]という値があるかどうかをチェックしています。
戻り値では「permit」というメソッドが呼び出されています。
permitメソッドは引数に指定されている項目が用意されているかをチェックするものとなっています。
つまり、post_paramsはparams「:post」の中に「:name」、「:content」という項目が用意されているかをチェックしていたのです。
このように送信されてきたparamsの状態をチェックし、フォームの内容が正しかった場合、モデルの作成、保存ができるという仕組みになっています。
3.ルーティング設定
次にルーティング設定を行いましょう。
「routes.rb」に以下のソースコードを追記しましょう。
ここで一つ注意点があります。
必ず、「get ‘posts/:id’, to: ‘posts#show’」の前に「get ‘posts/new’」と「post ‘posts/new’, to: ‘posts#create’」を記述するようにしましょう。
これを逆に記述して「posts/new」にアクセスすると「posts/:id」が先に認識され、エラーが発生してしまいます。
そのため、記述する順番を間違えないようにしましょう。
これでデータ新規登録ができるようになったので、「posts/new」にアクセスしてデータ登録を行っていきましょう。
「posts/new」にアクセスすると以下のように画面表示されます。
ここでは「タロウ」という名前、「Good morning!」という投稿内容で新規登録しましょう。
新規登録を行うと「index.html.erb」にしっかりと反映されました。
4.Ruby on Railsを学ぶことができるオススメの教材
Ruby on Railsを学習している皆様にオススメの教材をご紹介させていただきます。
Ruby on Rails 6 実践ガイド impress top gearシリーズ
Ruby on Rails 6 実践ガイド[機能拡張編]
パーフェクト Ruby on Rails 【増補改訂版】
\単月定額と比べて総額最大48,000円OFF!/
学び応援キャンペーン実施中!
コスパ最高! 月額1,980円〜利用できる!
- 侍テラコヤ ⇒ お得にRuby on Railsを学ぶ!
・コスパ最高! 月額1,980円〜利用できる!
・単月定額と比べて総額最大48,000円OFF!
・学び応援キャンペーン実施中! - Freeks ⇒ 無料説明会に申し込む!
・現役エンジニアに質問し放題のオンラインプログラミングスクール
・月額10,780円で受講し放題!
・無料説明会実施中!
- TechAcademy ⇒ 無料体験レッスンに申し込む!
・Ruby/Ruby on Railsだけでなく、Git/GitHub、HTML/CSS、Bootstrap、SQL、Heroku、Web API、Vue.jsなど幅広く学ぶことができる
・今まで得た知識をアウトプットするために自分の作りたいWebサービスを作る
・無料体験レッスン実施中!
- CodeCamp ⇒ 無料体験レッスンに申し込む!
・出品・購入機能付きフリマサイト、グルメサイト、画像投稿サイト、いいね機能、フォロー機能などを作りながらRuby on Railsを学べる
・無料体験レッスン実施中!
5.ポイント
・データの新規登録はnewアクションとcreateアクションで行います
・paramsを利用したデータ保存の書式
モデルのクラス.create(パーミッション済みのparams)
・パーミッションの書式
params.require(モデルのクラス).permit(項目)