こんにちは、すぐるです!
sugulogをお読みいただきありがとうございます!!
このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。
少しでもお役に立てれば幸いです。
今回は、Railsとストロングパラメーターということで
-
ツイートの保存
について簡単に、より深堀し解説します!!
その為このブログを読むことで、ツイートの保存についての理解がより深まるのはもちろん、ストロングパラメーターなどの概念についても理解できます。
是非最後までご愛読ください。
今回は、
-
ルートパスの設定
-
新規投稿ページの作成
-
ストロングパラメーター
-
プライベートメソッド
の順で解説していきます。
また、前回のブログの内容を引き継いで記述しています。
そのため、前回のブログを必ず1度読んでからお読みください。
では早速、みていきましょう!!
・ルート パスの設定
ツイート保存を実装する前に、ルートパスの設定についてだけ解説します。
railsアプリを作成した際、localhost:3000という元となるページ(ルート)が作成されました。
ただそのページはrailsアプリが作成できました!とお知らせするページであり、実際のアプリとは全く関係のないページです。
そのため、もしそのページにアクセスがあった際はそのまま表示するのではなく、関係のあるページに遷移したいですね!!
そのためルーティングで、以下のように記述しました。
root to: "代わりに表示させたいページのURI#アクション名"で遷移先を指定することができます。
今回はトップページである投稿一覧ページを表示させたいため、tweetsのindexを指定しています。
実際にルートにアクセスし、遷移されるか確認しましょう!!
・新規投稿ページの作成
ここは復習になるので、さらら〜といきますね!
まずはルーティングを、以下のように記述しました。
resourcesでアクションを2つ以上定義する場合は、アクションを[ ]で囲む必要があるので注意です!
次にコントローラーでは、以下のように記述しました。
今回はフォームを作成する際にインスタンス変数を使用したいため、newメソッドを@tweetに代入してます。
では最後にビューは、以下のように記述しました。
ここで注目してもらいたいのがform_withのオプションとして定義している、modelの記述です。
このオプションを使うことでインスタンス変数の中身から判断し、以前はurlで指定していた送信先、HTTPメソッドの定義を自動で行ってくれます!
model: 対象のアクションで定義したインスタンス変数で指定できます。
以前よりかなり楽に設定できますね!!
そしてブラウザでは、以下のように表示されています。
まだCSSを記述していないのでフォーム自体は整っていませんが、ヘッダーとフッターがしっかり反映されていることが確認できますね!
また投稿するを押すと、しっかりと上記のページに遷移することも確認しておきましょう!!
ではこのまま、投稿完了ページも作成していきます。
ルーティングは、以下のように記述しました。
新規投稿を保存する際は、createアクションでしたね!
次にコントローラーと言いたいところなんですが、その前に押さえておきたい概念がいくつかあるので、そちらから学んでいきましょう!!
・ストロングパラメーター
指定したキーを持つパラメーターのみを受け取るように制限するもの。
前回のアプリではストロングパラメーターを使用していませんでしたが、ストロングパラメーターを利用することにより取得するパラメーターを制限します。
そして取得したい情報のみを取得し、意図しないデータの更新を防ぎます。
パスワードなどを意図しない形で更新しないためにも、大切な概念になってきます。
そして、ストロングパラメーターの定義にはコントローラーで、requireメソッドとpermitメソッドを組み合わせます。
requireメソッドとは、送信されたパラメーターの情報が持つparamsが使用できるメソッドです。
パラメーターからどの情報を取得するかを選択します。
またpermitメソッドも、requireメソッドと同様にparamsが使用できるメソッドです。
取得したいキーを指定でき、指定したキーと値のセットのみを取得します。
記述の仕方としては、params.require(:モデル名).permit(:取得したいキー名)です。
requireメソッドでどのモデルの情報を取得するか指定し、permitメソッドで指定したモデルの中のどのキー(カラム)の値を取得するかを指定できるということです!
・プライベートメソッド
クラス外から呼び出すことのできないメソッド。Rubyではprivateと記述した以下のコードがプライベートメソッドになる。
プライベートメソッドを使用することでclassの外部から呼び出すことを不可能にし、誤って呼び出してしまう等のエラーを事前に防ぐことができます。
また可読性という観点でも、クラスのみで使用する定義をまとめることができます。
少し想像しにくいと思うので先程のストロングパラメーターも含め、crateアクションを定義してみます。
まずはcreateアクションを定義していますが、引数としてtweet_paramsが渡されています。
このtweet_paramsは、ストロングパラメーターを定義しています。
16行目からみていくと、requireでtweetモデルを指定し、permitでname、image、textキーが指定されています。
この結果createアクションは意図しない情報を含まず、ストロングパラメーターで指定された3つの情報のみを取得し保存します。
ポイントとしては、createアクションの引数としてストロングパラメーターを渡すということです!
またプライベートメソッドですが、private以下の記述が対象となります。
今回の場合だと、tweet_paramsという定義されたストロングパラメーターが対象になります。
この結果tweet_paramsは、tweetsコントローラー以外のクラスでは使用できなくなりました。
これで保存するためのcreateアクションの定義も完了です。
では最後に、投稿完了ページのビューだけ作成しましょう!!
ビューは、以下のように記述しました。
投稿完了後、投稿一覧ページの戻るリンクだけ忘れず記述しておきましょう!
またブログの始めにルートを投稿一覧ページに遷移したため、上記では遷移先として"/"を指定しています。
投稿完了後、以下のようなページが表示されれば今回のブログは終了です!!
また新規投稿が、投稿一覧ページにも反映されているか確認しましょう
※現段階では画像の表示記述がないため、画像を投稿しても表示されません。
以上、今回のブログでした。
ツイートの保存についての理解がより深まり、ストロングパラメーターなどの概念についても理解できましたか??
ストロングパラメーターは、Railsアプリを作成する上で重要な概念です。
今回のブログでしっかり押さえておきましょう(≧∀≦)/
最後に!!
今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。
少しでも気になった方はお試しでもいいので1度、読者登録お願いします!
またTwitterでもプログラミングに関することを中心に情報を発信してます。
宜しければそちらのフォローもお願いします。
最後までご愛読いただきありがとうございました!!