『週刊』オリジナルアプリ奮闘記③【第6号】
こんにちは!
テクノシップブログです!
今回が第6回目の記事になります!
私は現在ITエンジニア養成スクールの『TechCamp』の第109期生として
プログラミングを勉強しています。
その中で、学習の総仕上げとして
「オリジナルアプリの実装」
という課題があります。
その実装の過程をこれから「奮闘記」として週刊でお送りしたいと思ってます!!
さて、今回は前回の記事から2週間経ってしまいましたが💦💦
前回立てた目標の確認と、この1週間で学んだことのアウトプットです。
前回の目標の成果の確認
前回立てた目標は以下の通りでした。↓↓↓
結果はどうだったのか。
この目標は達成しました!!
しっかりと2/12時点で達成しています。
現時点(2/21)での進捗状況は以下のようになっています。
あとは伝票出力機能を残すのみとなっています!!
目標達成の要因
目標達成の要因を自分なりに分析してみると、
①Tech Campでのカリキュラム学習の復習ができていたこと
②分からない点を整理し、質問することで解決へと繋げたこと
この2点が挙げられます。
①については、伝票の「詳細表示」、「編集」、「削除」の機能実装について、
カリキュラムで学んだことをしっかりと復習していたおかげで、
スムーズな実装につながりました。
それぞれに関して、MVCの流れに沿って理解しておくことがとても重要だと
改めて実感しました!!
【MVCの流れ】
次に②についてですが、「伝票作成機能」の実装に関して、
処理の流れを把握してコーディングするのが難しく、つまづきました。
しかし、そこで諦めることなく、「どの点がどのように分からないのか」
を紙に書き出し、Qiitaなどの質問サービスを使って解決へと繋げていきました。
質問したこと↓↓
そのおかげで、予定通りの実装完了に至りました!!
難しかった点のアウトプット
ここまでで難しかったのは、
「伝票作成機能の実装」です。
この実装では、以下のようなデータの処理の流れを想定して作りました。
「出荷先」、「出荷日」、「伝票番号」、「送り状ナンバー」
の4つは伝票情報として、「slipsテーブル」へ保存します。
そして、「品番」、「色」、「数量」、「備考」の4つを一つの出荷商品情報
として、計10個までの商品を一括で「ordersテーブル」へ保存できるようにします。
app/models/slip.rb
コード上では、まずslipモデルにて、
「has_many :orders」でアソシエーションを定義した上で(orderモデルの方は「belongs_to :slip」)、「accepts_nested_attributes_for :orders」と記述する
ことで、ordersテーブルへの一括登録のためのデータの通過を許可します。
この記述は後ほど登場する「fields_forメソッド」に活きてきます。
app/controllers/slips_controller.rb
次にslips_controllerにて、slipモデルのインスタンスを生成した上で、
一括登録のために必要な数だけorderモデルのインスタンスも生成します。
次に新規作成画面のビューを作成します。
こちらは「fields_forメソッド」を駆使して、必要な数だけ商品登録用の
フォームも生成できるようにします。
fields_forメソッドの使い方については、以下のサイトが参考になります!
実際のコード画面↓↓
app/views/slips/new.html.erb
「fields_for :orders」と記述していることにより、
Slipモデルに関するフォームが作成されると同時に紐づくOrderモデルに関する
フォームを作成することができます。
今回はslipsコントローラーで10回Orderモデルのインスタンスを生成しているので、
10セット分のフォームが作成されます。
次にデータ保存の記述です。
slipsコントローラーにおいて、以下のように記述します。
app/controllers/slips_controllers.rb
ストロングパラメーターの設定方法が、
「テーブル名_attributes: [:カラム名, :_destroy, :id]」
と付け加えることで、ordersテーブルに保存するべき商品情報も一緒に保存できる
ようになります。
実装にあたっては、以下のサイトを参考にさせていただきました!!
この2週間のまとめ
この2週間を一言でまとめると、
「粘り強さが大切」です。
今回の「伝票作成機能」の実装は、
「一つのフォームから複数のテーブルへ保存する+一括登録がある」
という複雑な実装だったので、
正直処理の流れを理解するまでに時間がかかり、実装を諦めようかと
思いました💦💦
しかし、
「何が分かっていないのか」
を紙に一つ一つ書き出し、一つ一つ解決していくことで
気がついたら実装が完了していました。
私の経験上、分からなくてつまづきそうな時は
大体「何が分からないのかがハッキリしていないこと」
が原因だと考えています。
だからこそ、今回の経験でも学びましたが、
「分からないことが分からない」
という状況を無くすことがとても大切だと思います!!
次回の目標
今回は前回の執筆から2週間経過してしまっているので、
残りの「伝票出力機能」も大詰めに差し掛かっています。
ということで次回(2/27ごろ)の目標は、
「オリジナルアプリの実装&&デプロイ完了🎉」
とします!
ラストスパート頑張ります!!
次回もお楽しみに!!
テクノシップ第6号プチ編集後記
〜エラー解決が終わらず、手が止まってしまった時、
なぜか
大好きな「Led Zeppelin」の音楽を聴いてリラックスすると
解決のためのアイデアが湧きます。
つまづいた時こそ、リラックスする精神が大切なんですかね。〜