Ruby on rails を初心者向けに解説④ ~命名規則とform_Tagの使い方について~

#はじめに
今回は前回の記事の続きになります。

よろしければ以前の記事も御覧ください。

[Ruby on rails を初心者向けに解説①](https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76)
[Ruby on rails を初心者向けに解説②　~リンクの作成~](https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76)
[Ruby on rails を初心者向けに解説③　~データベースの作成~](https://qiita.com/renesisu727/items/c647582a59cfd7bf0a98)

#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ファイルに以下のコードを書いてください。

```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リクエストの違いについては、[こちら](https://qiita.com/ryokky59/items/bba97cbfaa899b03e071)の記事を参考にしてください。
`type="submit"`となっているボタンがユーザーから送られると、`users/create`に対応するpostリクエストが実行されます。

今回は、以下のようにルーティングしています。

```routes.rb
post "users/create" => "users#create"
```

つまり、上記のデータはusersコントローラーのcreateアクションに送信されます。createアクションでは以下のコードを書きます。

```users_controller.rb
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])`を用いることでモデルを作成し、データベースに格納しています。

ユーザーからは以下のようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411258/899da606-599c-c1c7-2b10-b15f699d6795.png)

この状態で`送信`を押してみましょう。すると、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コントローラーに以下のようにコードを追記しましょう。

```users_controller.rb
def create
  user = User.new(name: params[:name], password: params[:password])
  user.save
  redirect_to("/users/index")
end
```

このように書くと、送信を押した場合に`/users/index`に対応するファイルにリダイレクトされます。

ちなみに、リダイレクトを書く場合は、パスの書き始めに`/`を入れることを忘れないようにしてください。

#終わりに
今回の記事はここまでになります。

お疲れさまでした。

よろしければ以下の記事も御覧ください。


[Ruby on rails を初心者向けに解説⑤ ~データベースの編集と削除~](https://qiita.com/renesisu727/items/8f3a4b7c52c888b52be1)

[Ruby on rails を初心者向けに解説⑥　~バリデーションの作成~](https://qiita.com/renesisu727/items/cee8bbea1147ff78b72d)

[Ruby on rails を初心者向けに解説⑦　~フラッシュの実装~](https://qiita.com/drafts/fd36234d669283c87048/edit)