20201224_アウトプット(ウィザード形式の実装)
今日行ったこと 3時間15分
- ウィザード形式の実装
👉アプリ自体はできた。しかし、form_with
に上手く変更できず。メンターさんにチャットで質問して終了。
新しい発見
form_with
に変更したいが上手くいっていない状況について
【実装の状況】
・カリキュラム通りに一通り終わった。(ミニアプリ出来た。)
・しかし、form_for
って非推奨だと以前学んだのでform_with
に変えたかった。
(1)VSコードにおいてform_for
をform_with
に置き換え(該当8箇所全て)
(2)こちらのサイトをみてmodel:
の表記が必要だと思い、以下のようにform_with
直後の部分にmodel:
追加。
(3)同じように、renderの部分についてもキーにあたる部分がmodel:
になるよう変更。
<%= form_with(model:@user, url: user_registration_path) do |f| %> <%= render "devise/shared/error_messages", model: @user %>
の3つについて行った。
【エラーの状況】
・Web上は次ボタン
を押しても画面遷移しないだけであってエラーは出ていない。
・ターミナル上にエラーが起きている。
【エラーから行ったこと】
・セッションに持たせている内容がパラムスに入っているか確認したかったので、binding.pry
を使って、コントローラーに入れた。
そうすると、Sessionの中身は運ばれているけれど、上手く遷移されない(保存されないまま次のページいけず)
わからなかった😣
ウィザード形式に関して、新しく知ったこと
- buildメソッドはモデルのアソシエーションを組む時、データを保存したくない場合に使うことを知った。しかし、アソシエーションのパターンによって、メソッド名が変わることも知った。
Railsモデルの関連付けでbuildを使う時のメソッド名 · GitHub
ActiveRecordStore
というgemを使ってセッションデータだけ別に保存できる方法もあることを知った。
ウィザード形式にしたい時は、各ページごとにモデル・テーブルを作る必要があることを理解。理由としては、ページ遷移ごとに(そのテーブルごとに)バリデーションをかけたいため。
今回「ユーザーテーブル」に「住所テーブル」が紐づくようにマイグレーションファイルで参照設定をしている。ウィザード形式は最後に保存がなされるので、途中経過として参照している「user_id」が空になってしまう。対処法として、Userモデルに対して、
optional: true
設定をする。そのことによって一時的に外部キーがnil
であってもDBに保存できるようになると理解。devise管理下にusersコントローラーを作成し、ウィザード機能を実装していくことを理解。
感想
寝不足気味💦PHPの本を読みながら今日はもう寝よう😪
コントローラーの記述内容について理解が浅いと感じた。(sessionを配列やハッシュを使ってデータを保存している部分がわかるようでわかっていない)今回エラーが解決できていないのもそこの理解がわかっていないからだと思った。😣
README最初に書き換えれば良かった。最初のミニアプリで失敗学べたから良かった。
インタビューについて身近なテックキャンプの仲間に募集したところ、良いよといってくれる方が想像以上にいて嬉しかった。(ありがとうございます!)
覚書
ミニアプリ(目的:知識の引き出しを増やす)
コメント機能の実装
ウィザード形式の実装 👉12/23 70%
SNS認証によるログイン機能の実装
複雑な検索機能の実装
タグ付機能の実装
パンくず機能の実装
クレジットカード決済機能(ユーザーに紐付け)
エラーメッセージの日本語化(チャットアプリに追加実装)
プレビュー機能の実装・複数枚の画像投稿の実装
優先順位
(1)ミニアプリの作成(実装方法の理解)・個人アプリのためのインタビュー・DB設計等
👉12月29日(火)締め切り
(2)個人アプリの作成。
👉1月11日(月)締め切り(基本実装)
(3)(1)で学んだことを「フリマアプリ」あるいは「個人アプリ」に反映。
👉1月17日(日)締め切り
追加:(1)(2)(3)と同時並行で、PHPについても学ぶ。
身に付ける力(直近)
PHP7
ドメイン駆動開発
Docker
身に付ける力(ゆくゆく・覚書)
環境構築
環境変数などのOS知識
バージョン対応力
データベースをインポートする力・エクスポートする
GitHubActions×OpenAPIGenerator(APICilent)