sugulogの日記

Rials、ストロングパラメーター!ツイートを保存しよう!!

スポンサードリンク

f:id:sugulog:20201005171744p:plain
こんにちは、すぐるです!

sugulogをお読みいただきありがとうございます!!

このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。

少しでもお役に立てれば幸いです。

 

今回は、Railsとストロングパラメーターということで

  • ツイートの保存

について簡単に、より深堀し解説します!!

その為このブログを読むことで、ツイートの保存についての理解がより深まるのはもちろん、ストロングパラメーターなどの概念についても理解できます。

是非最後までご愛読ください。

 

今回は、

  • ルートパスの設定

  • 新規投稿ページの作成

  • ストロングパラメーター

  • プライベートメソッド

の順で解説していきます。

また、前回のブログの内容を引き継いで記述しています。

そのため、前回のブログを必ず1度読んでからお読みください。

sugulog.hatenadiary.jp

では早速、みていきましょう!!

・ルート パスの設定

ツイート保存を実装する前に、ルートパスの設定についてだけ解説します。 

railsアプリを作成した際、localhost:3000という元となるページ(ルート)が作成されました。

ただそのページはrailsアプリが作成できました!とお知らせするページであり、実際のアプリとは全く関係のないページです。

そのため、もしそのページにアクセスがあった際はそのまま表示するのではなく、関係のあるページに遷移したいですね!!

そのためルーティングで、以下のように記述しました。

f:id:sugulog:20201005012115p:plain

root to: "代わりに表示させたいページのURI#アクション名"で遷移先を指定することができます。

今回はトップページである投稿一覧ページを表示させたいため、tweetsのindexを指定しています。

実際にルートにアクセスし、遷移されるか確認しましょう!!

・新規投稿ページの作成

ここは復習になるので、さらら〜といきますね!

まずはルーティングを、以下のように記述しました。

f:id:sugulog:20201005013509p:plain

resourcesでアクションを2つ以上定義する場合は、アクションを[ ]で囲む必要があるので注意です!

次にコントローラーでは、以下のように記述しました。

f:id:sugulog:20201005020933p:plain

今回はフォームを作成する際にインスタンス変数を使用したいため、newメソッドを@tweetに代入してます。

では最後にビューは、以下のように記述しました。

f:id:sugulog:20201005022348p:plainここで注目してもらいたいのがform_withのオプションとして定義している、modelの記述です。

このオプションを使うことでインスタンス変数の中身から判断し、以前はurlで指定していた送信先、HTTPメソッドの定義を自動で行ってくれます!

model: 対象のアクションで定義したインスタンス変数で指定できます。

以前よりかなり楽に設定できますね!!

そしてブラウザでは、以下のように表示されています。

f:id:sugulog:20201005024812p:plain

まだCSSを記述していないのでフォーム自体は整っていませんが、ヘッダーとフッターがしっかり反映されていることが確認できますね!

また投稿するを押すと、しっかりと上記のページに遷移することも確認しておきましょう!!

ではこのまま、投稿完了ページも作成していきます。

ルーティングは、以下のように記述しました。

f:id:sugulog:20201005025707p:plain

新規投稿を保存する際は、createアクションでしたね!

次にコントローラーと言いたいところなんですが、その前に押さえておきたい概念がいくつかあるので、そちらから学んでいきましょう!!

・ストロングパラメーター

指定したキーを持つパラメーターのみを受け取るように制限するもの。

前回のアプリではストロングパラメーターを使用していませんでしたが、ストロングパラメーターを利用することにより取得するパラメーターを制限します。

そして取得したい情報のみを取得し、意図しないデータの更新を防ぎます。

パスワードなどを意図しない形で更新しないためにも、大切な概念になってきます。

そして、ストロングパラメーターの定義にはコントローラーで、requireメソッドpermitメソッドを組み合わせます。

requireメソッドとは、送信されたパラメーターの情報が持つparamsが使用できるメソッドです。

パラメーターからどの情報を取得するかを選択します。

またpermitメソッドも、requireメソッドと同様にparamsが使用できるメソッドです。

取得したいキーを指定でき、指定したキーと値のセットのみを取得します。

記述の仕方としては、params.require(:モデル名).permit(:取得したいキー名)です。

requireメソッドでどのモデルの情報を取得するか指定し、permitメソッドで指定したモデルの中のどのキー(カラム)の値を取得するかを指定できるということです!

・プライベートメソッド

クラス外から呼び出すことのできないメソッド。Rubyではprivateと記述した以下のコードがプライベートメソッドになる。

プライベートメソッドを使用することでclassの外部から呼び出すことを不可能にし、誤って呼び出してしまう等のエラーを事前に防ぐことができます。

また可読性という観点でも、クラスのみで使用する定義をまとめることができます。

少し想像しにくいと思うので先程のストロングパラメーターも含め、crateアクションを定義してみます。

f:id:sugulog:20201005162113p:plain

まずはcreateアクションを定義していますが、引数としてtweet_paramsが渡されています。

このtweet_paramsは、ストロングパラメーターを定義しています。

16行目からみていくと、requireでtweetモデルを指定し、permitでname、image、textキーが指定されています。

この結果createアクションは意図しない情報を含まず、ストロングパラメーターで指定された3つの情報のみを取得し保存します。

ポイントとしては、createアクションの引数としてストロングパラメーターを渡すということです!

またプライベートメソッドですが、private以下の記述が対象となります。

今回の場合だと、tweet_paramsという定義されたストロングパラメーターが対象になります。

この結果tweet_paramsは、tweetsコントローラー以外のクラスでは使用できなくなりました。

これで保存するためのcreateアクションの定義も完了です。

では最後に、投稿完了ページのビューだけ作成しましょう!!

ビューは、以下のように記述しました。

f:id:sugulog:20201005164502p:plain

投稿完了後、投稿一覧ページの戻るリンクだけ忘れず記述しておきましょう!

またブログの始めにルートを投稿一覧ページに遷移したため、上記では遷移先として"/"を指定しています。

投稿完了後、以下のようなページが表示されれば今回のブログは終了です!!

f:id:sugulog:20201005165043p:plain

また新規投稿が、投稿一覧ページにも反映されているか確認しましょう

※現段階では画像の表示記述がないため、画像を投稿しても表示されません。

 

以上、今回のブログでした。

ツイートの保存についての理解がより深まり、ストロングパラメーターなどの概念についても理解できましたか??

ストロングパラメーターは、Railsアプリを作成する上で重要な概念です。

今回のブログでしっかり押さえておきましょう(≧∀≦)/

 

最後に!!

今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。

少しでも気になった方はお試しでもいいので1度、読者登録お願いします!

またTwitterでもプログラミングに関することを中心に情報を発信してます。

宜しければそちらのフォローもお願いします。

最後までご愛読いただきありがとうございました!!