作って学ぶRuby on Rails Vol.15 CRUDを学ぼう!その3
Modelへの登録処理
次に入力フォームに入力した値をUserというModelを利用してデータベースへ登録してみましょう。
入力フォームに入力した値を送信するには、HTMLのinputタグを使用してsubmitしなければなりません。
RubyonRailsには、submitというメソッドが用意されており、簡単に送信できるようになっています。下記の1行をapp/views/users/new.html.erbへ追記して下さい。
<%= form_for @user do |f| %>
<div>
<%= f.text_field :name %>
</div>
<div>
<%= f.select :gender, User.genders.keys.to_a %>
</div>
<div>
<%= f.date_select :birthday %>
</div>
<div>
<%= f.text_field :hometown %>
</div>
<div>
<%= f.text_area :remarks %>
</div>
<div>
<%= f.submit "送信" %>
</div>
<% end %>
<%=f.submit“送信”%>と記述することで、フォームの内容をControllerへ送信することができます。
続いて、Controller側の処理を追記していきます。app/controllers/users_controller.rbを開き、user_paramsというメソッドを作成します。
user_paramsメソッド
params.require(:user).permit(:name,:gender,:birthday,:hometown,:remarks)end
クロスサイトリクエストフォージェリという攻撃を防ぐための記述なのですが、簡単に説明すると、permitメソッドの引数に指定されたパラメータ以外は、受け取らないという意味になります。
つまり、user_paramsメソッドを利用するとこで、name、gender、birthday、hometown、remarks以外の情報が送信されてきた場合は、エラーになります。
その後、createというActionに下記の3行を追記して下さい。
@user.saveredirect_to@user
1行目:UserというModelの引数にuser_paramメソッド(つまり送信されたパラメータ)を渡し、新たなユーザー情報を作成します。
2行目:1行目で作成された新たなユーザー情報に対し、saveメソッドを実行することで登録処理を行います。この時点で、新しいユーザー情報がデータベースに登録されます。
3行目:redirect_toメソッドは、引数である@userに格納された情報を参照するページを描画する処理になります。@userにはユーザー情報(UserというModel)が格納されているので、内部的にはshowというActionを再度実行してapp/views/users/show.html.erbを表示する形となります。※現状ではapp/views/users/show.html.erbには何も記述していないので、表示自体は空の状態です。app/views/users/show.html.erbについては次項で記述していきます。
実装後のUsersControllerは、下記のようになります。
classUsersController<ApplicationController
実装完了後、ブラウザで実際に登録処理を行ってみましょう。
上の図のように、フォームに値を入力し、送信ボタンをクリックして下さい。
クリック後、エラーが発生せず、ページが切り替わればデータの登録が完了しているはずです。
Modelの主なメソッド
本項でsaveメソッドを学習しました。saveメソッドはModelにあらかじめ実装されている組み込みメソッドになります。saveメソッドを利用することで、データの登録を行うことができます。
他にもModelには組み込みメソッドがいくつか存在するので、ここでご紹介いたします。
次項以降で全て利用することになります。
メソッド使用例実行結果
※name以外に、どのカラム名でも指定できます。※name以外に、どのカラム名でも指定できます。
データの登録の有無を確認するには、SQLiteのコマンドを実行する必要があります。
まず、config/database.ymlを開き、データベース名を確認しましょう。
※デフォルトの状態だと、データベース名はdb/development.sqlite3となっています。
下記のコマンドを実行して、SQLを実行できる状態にします。
$ sqlite3 db/development.sqlite3
下記のSQLを実行して下さい。
上記SQLの内容としては、usersテーブルから全てのユーザー情報を参照するという意味になります。
SQL実行後、上の図のようにユーザー情報が取得できていれば、登録は成功しています。
SQLについて例:select*fromusers;SQLはStructuredQueryLanguageの略であり、データベースに関する操作を行うための言語になります。データを参照する場合は、特に条件を指定しない限りselect*from◯◯◯;の◯◯◯の部分にテーブル名を指定することで全てのデータを参照することができます。*(アスタリスク)はワイルドカードと呼ばれ、「全ての」を意味します。よって上記例では、usersテーブルの全てのカラムを参照することになります。
例
このSQLだとusersテーブルからidがxxxのユーザー情報のnameカラムを参照します。
※RubyonRailsカリキュラム内では、Modelに頼ったCRUDをメインに進めるので、基本的にSQLの記述法や使用方法はあまり紹介しません。
確認後、上記コマンドでSQLiteを終了します。
NEXTLESSONユーザーを表示しよう!
PREVLESSONCRUDを学ぼう!その2
目次-Ruby&RubyonRailsテキスト目次