30DAYSトライアル4th(Rails)DAY28(仮)の課題は「ドットインストール Rails入門コース #14〜#28」です。
※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に自分で決めて進めているからです。
Progateでやった内容と重複するところもあるので、新たなことが出てきた箇所だけに絞ります。
目次
30DAYSトライアル4th(Rails)DAY29(仮)の学習内容
ドットインストールのRailsコースの残りをこなしていきます。
- #14 記事を追加できるようにしよう
- #15 新規作成フォームを作ろう
- #16 Strong Parametersを設定しよう
- #17 バリデーションを設定しよう
- #18 エラーメッセージを表示しよう
- #19 編集フォームを作ろう
- #20 記事を更新してみよう (
- #21 Partialで共通部品を作ろう
- #22 記事を削除できるようにしよう
- #23 コメントモデルを作っていこう
- #24 コメント追加フォームを作ろう (
- #25 コメントを保存しよう
- #26 コメントの一覧を表示しよう
- #27 コメントを削除できるようにしよう
- #28 アプリを完成させていこう
#15 新規作成フォームを作ろう
formは「form_forヘルパー(メソッド)」で作成することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<%= form_for formキー, url: プレフィックス_path do |f| %> <p> <%= f.text_field :キー1 %> # f.text_filed = type="text" </p> <p> <%= f.text_area :キー2 %> # f.text_area = type="textarea" </p> <p> <%= f.submit %> </p> <% end %> # f. # 下記のようにコントローラにデータが送信される params[:formキー値]に {"キー1"=>"キー1データ", "キー2"=>"キー2データ"} とうふうに送信される |
現時点ではこういう理解ですが、この「form_forヘルパー」は色んな人が混乱しているみたいなので、理解を深めるために後々自分なりにもうよっとまとめてみたいと思います。
■今回参考にみてみたURL
Railsのform_forの使い方が リファレンス見てもいまいちわからなかったので 俺式に全力で整理してみた
コントローラで送信されてきた値をそのまま表示する
コントローラで下記のように記述すると送信されてきた値をそのまま表示することができmる。
1 2 3 4 |
render plain: params[:キー].inspect # 実行結果の例 <ActionController::Parameters {"title"=>"tq", "body"=>"b1"} permitted: false> |
#16 Strong Parametersを設定しよう
Railsで悪意のあるデータが挿入されることを防ぐために、formなどから送信されてきたデータの形式を検証しなければならない仕組みになっているので、データの検証を行わなければエラーとなります。
この仕組みはStrong Parametersと呼ばれています。
Strong Parametersのチェックは以下のように行い、privateメソッドにまとめることが多い。
1 2 3 4 5 6 |
private def メソッド名 # postというキーの中のハッシュがtitleとbodyを持ってなければならないというチェック例 params.require(:post).permit(:title, :body) end |
#21 Partialで共通部品を作ろう
新規作成フォームと更新フォームなどがある場合、フォーム部分は共通である場合が多いです。そういった時はPartialという仕組みを使用するこtで、フォーム部分を共通化することができる。
Partialは「app/views/該当コンロローラ/」の中にファイルを作成します。ファイル名のルールとして頭文字に「_」をつけて「_共通部分名.html.erb」というふうに作成する。
作成したPartialのファイルに共通部分のHTMLを記述し、呼び出し元には以下のように記述します。
1 2 |
# 共通部分名は頭文字の「_」はつけない <%= render '共通部分名' %> |
#23 コメントモデルを作っていこう
モデルを作成する時に「モデル名:refereces」を付加すると、該当のモデルとの紐付きを設定できる。
1 |
rails g model モデル名B カラム名1:データ型1 ・・・ モデル名A:references |
上記のコマンドを実行してモデルを作成すると、作成されたモデルは以下のようになる。
1 2 3 4 5 |
class Comment < ApplicationRecord # referencesを付加すると追加される belongs_to :モデルAの小文字単数形 end |
紐付く先のモデルには手動でき以下の記述を追加する。
1 2 3 4 5 |
class Post < ApplicationRecord # モデル名Aが1に対して複数のモデル名2が存在するという意味 has_many :モデル名Bの小文字複数形 # このように記述すると、「モデル名Aのインスタンス.モデル名Bの小文字複数形」という形でモデルBにアクセスできる end |
#28 アプリを完成させていこう
「has_many」を定義したモデルに「dependent: destroy」を記述すると、「has_many」を定義したモデルのレコードが削除された時に、関連先のモデルのレコードも併せて削除してくれる。
1 2 3 4 |
class Post < ApplicationRecord has_many :モデル名Bの小文字複数形, dependent: :destroy rails_lessons |
まとめ
Progateで学習した内容と重複しているところも多々あるので、2日間でざっと流しましたが、Progateでは学習してない内容や異なる記述方法について学習することができました。
というか色々ありすぎて消化でききれていないので、今後はRailsチュートリアルをやりながら一つ一つ噛み砕いていきたいと思います。