#はじめに
今回は前回の記事の続きになります。
よろしければ以前の記事も御覧ください。
Ruby on rails を初心者向けに解説①
Ruby on rails を初心者向けに解説② ~リンクの作成~
Ruby on rails を初心者向けに解説③ ~データベースの作成~
#Railsの命名規則について
ここまで、コントローラーやモデルを作成してきました。
それらには、命名規則があります。学んでいきましょう。
##Modelの命名規則
モデルとは、データベースを作成するための設計図です。
設計図は一つであるため、モデルクラス名は単数形
で作成します。
テーブルは、そのモデルのデータが複数あるため、自動的に複数形
で表されます。
前回の記事でuser
という名前でモデルを作成しました。
そうすると、users
という名前でテーブルが作成されます。
また、クラス名はUser
というふうに、最初が大文字になります。
##Viewの命名規則
Viewフォルダは配下に複数のファイルを持つため、複数形
になります。
##Controllerの命名規則
Controllerは複数のアクションを持つため、複数形
で作成します。
#データベースにデータを登録
以前の記事では、railsのコンソールを使用してデータベースにデータを登録しました。
今回は、ブラウザをユーザーに操作してもらうことでデータベースにデータを登録しましょう。
その前に、一度データベースの確認を行います。
ターミナルに以下のコマンドを打ち込みましょう。
rails dbconsole
次のコードでカラム名の表示をONにできます。
sqlite> .headers on
この状態で、次のSQLの文を書くと中身を確認することができます。
sqlite> select * from users;
id|name|password|created_at|updated_at
1|poco|maru|2020-05-20 10:50:13.177731|2020-05-20 10:50:13.177731
現在は、usersテーブルにnameカラムとpaswordカラムが格納されていることが分かりますね。
それでは、入力フォームを作成してユーザーから送られてくるデータをデータベースに格納してみましょう。
/users/new.html.erbファイルに以下のコードを書いてください。
<%= form_tag("/users/create") do %>
<p>ユーザー名</p>
<input name="name">
<p>password</p>
<input name="password">
<input type="submit" value="送信">
<% end %>
form_tag
は、viewファイルからコントローラーに何か値を送ったり、削除したりするときに使います。いわゆるPOSTリクエスト
と呼ばれるものです。getリクエストとpostリクエストの違いについては、こちらの記事を参考にしてください。
type="submit"
となっているボタンがユーザーから送られると、users/create
に対応するpostリクエストが実行されます。
今回は、以下のようにルーティングしています。
post "users/create" => "users#create"
つまり、上記のデータはusersコントローラーのcreateアクションに送信されます。createアクションでは以下のコードを書きます。
def create
user = User.new(name: params[:name], password: params[:password])
user.save
end
このコードで、userモデルのUserクラスを用いて、データベースのusersテーブルにデータを格納しています。
form_tagで送られてきたデータにおいて、name属性が指定されているタグが存在した場合、コントローラー内においてparams[name属性]
として値を扱うことができます。
この場合、<input name="name">
内の値がparams[:name]
に、<input name="password">
の値がparams[:password]に格納されます。
その送られてきたデータに対してUser.new(name: params[:name], password: params[:password])
を用いることでモデルを作成し、データベースに格納しています。
ユーザーからは以下のようになっています。
この状態で送信
を押してみましょう。すると、usersコントローラーのcreateアクション内において、thisという文字列がparams[:name]に格納され、testという文字列がparams[:password]に格納されます。
以下のようにデータを格納することができました。
3|this|test|2020-05-21 05:30:36.718523|2020-05-21 05:30:36.718523
しかし、このままだと送信を押しても特に変化はありません。退屈なので、他のファイルにリダイレクトさせましょう。
###送信を押した場合にリダイレクト
送信を押すとusersコントローラーのcreateアクションが実行されるので、このcreateアクション内にリダイレクトのコードを書けば、他のファイルにリダイレクトされるようになります。
usersコントローラーに以下のようにコードを追記しましょう。
def create
user = User.new(name: params[:name], password: params[:password])
user.save
redirect_to("/users/index")
end
このように書くと、送信を押した場合に/users/index
に対応するファイルにリダイレクトされます。
ちなみに、リダイレクトを書く場合は、パスの書き始めに/
を入れることを忘れないようにしてください。
#終わりに
今回の記事はここまでになります。
お疲れさまでした。
よろしければ以下の記事も御覧ください。
Ruby on rails を初心者向けに解説⑤ ~データベースの編集と削除~