katotatsu1213のブログ

プログラミング学習の過程を記録しようと思います

写真投稿アプリの作成過程

お疲れ様です。

今日は前回の記述通りに写真投稿ができるアプリの実装について記述していこうと思います!

 

まず、前回のアプリとの違いはアクションの数が3つから7つになりました。

前回

・index

・new

・create

今回

・index

・new

・create

・destroy

・edit

・update

・show

といった感じです。

つまり今回は削除や編集、詳細表示などが追加されました。

 

また、今回はテーブルが3つあります。

投稿機能のテーブル、ユーザー機能のテーブル、コメント機能のテーブルとこれらの関係性を示すことで、複雑なデータをシンプルに記述する方法を学びました。

前回と同様にアプリの雛形を作成します。この時、前回は特に気になってすらいませんが実はデータベースは運用環境というものがあり3つの環境ごとに使い勝手が違います。

開発環境、テスト環境、本番環境とそれぞれの環境ごとに設定の変更が必要になります。

 

ではまず、投稿機能から実装していきます。

前回と同じでモデルやらコントローラーを作成していきます。

ルーティングの設定をする際に今回はresourcesメソッドを記述します。これは7つのアクションへのルーティングを自動生成するメソッドです。また今回はonlyオプションも記述します。これは指定したアクションのみのルーティングを自動生成します。

なぜこのわざわざ記述するのかという疑問はありましたが、開発において不要なアクションを設定しておくとエラーの原因にもなるので記述しました。

 

次にビューに関してですが新しい知識としてレイアウトテンプレートとyieldメソッドを学びました!

レイアウトテンプレートとはビューファイルの共通部分をまとめたものです。

レイアウトテンプレートに、headの情報やヘッダー、フッターなどのすべてのビューで共通となる部分を記述しておくことで、各テンプレートファイルは個別の見た目を記述するだけでよくなります。

これに対して、各テンプレートファイルを展開するためのメソッドがyieldメソッドです。

yieldを記述することで、indexアクションの場合はテンプレートファイルのindex.html.erbの内容が、newアクションの場合はnew.html.erbが、yield記述部分へ展開されるようになります。

 

また、今回はフォームからデータを保存する際にストロングパラメーターを使用します。

ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように制限するものです。

ストロングパラメーターを使用する理由は、受け取るパラメーターを制限しなければ、仕様以外のパラメーターも使われてしまうためです。この状態だと、意図しないデータの更新をされる可能性が発生します。

たとえば、他人のログインパスワードを変更するパラメーターを追加で送信すれば、勝手にパスワードを変更できてしまうのです。

これを回避するために、ストロングパラメーターを使用し、パラメーターを制限する必要があります。

 

今回はプライベートメソッドとしてストロングパラメーターを定義しました。

プライベートメソッドを使用することで外部から呼ばれては困るメソッドを下売りできたり可動性が向上します。

例えば、繰り返し同じメソッドは集約できるのでコードがシンプルになります。

 

ここまで前回では記述しなかった内容を学びましたが長くなりそうなので今回はあとバリデーションについて話して終わりにしようと思います。

バリデーションとはデータを登録する際に、一定の制約をかけることをいいます。例えば文字数制限や登録されているメアドは登録できないなどをモデルディレクトリ内の各ファイルに記述する必要があります。

これで欲しい情報のみをデータベースに保存できるようになりました。

 

今日の復習内容は以上になります。

では!!