テクノシップブログ

田舎育ちで文系でもITの世界へ

『週刊』オリジナルアプリ奮闘記③【第6号】

f:id:technoship0329:20220129200110j:plain

こんにちは!

テクノシップブログです!

 

今回が第6回目の記事になります!

 

私は現在ITエンジニア養成スクールの『TechCamp』の第109期生として

プログラミングを勉強しています。

 

その中で、学習の総仕上げとして

オリジナルアプリの実装

という課題があります。

 

その実装の過程をこれから「奮闘記」として週刊でお送りしたいと思ってます!!

 

さて、今回は前回の記事から2週間経ってしまいましたが💦💦

前回立てた目標の確認と、この1週間で学んだことのアウトプットです

 

 

前回の目標の成果の確認

前回立てた目標は以下の通りでした。↓↓↓

                    f:id:technoship0329:20220216220452p:plain



 

結果はどうだったのか。

 

この目標は達成しました!!

 

しっかりと2/12時点で達成しています。

 

現時点(2/21)での進捗状況は以下のようになっています。

f:id:technoship0329:20220216220648p:plain



あとは伝票出力機能を残すのみとなっています!!

 

 

目標達成の要因

 目標達成の要因を自分なりに分析してみると、

 

①Tech Campでのカリキュラム学習の復習ができていたこと

②分からない点を整理し、質問することで解決へと繋げたこと

 

 この2点が挙げられます。

 

 ①については、伝票の「詳細表示」、「編集」、「削除」の機能実装について、

カリキュラムで学んだことをしっかりと復習していたおかげで、

スムーズな実装につながりました。

 

 それぞれに関して、MVCの流れに沿って理解しておくことがとても重要だと

改めて実感しました!!

 

MVCの流れ】

f:id:technoship0329:20220221173546j:plain

 

 

 次に②についてですが、「伝票作成機能」の実装に関して、

処理の流れを把握してコーディングするのが難しく、つまづきました。

 

 しかし、そこで諦めることなく、「どの点がどのように分からないのか

を紙に書き出し、Qiitaなどの質問サービスを使って解決へと繋げていきました。

 

質問したこと↓↓

qiita.com

 そのおかげで、予定通りの実装完了に至りました!!

 

 

難しかった点のアウトプット

 ここまでで難しかったのは、

 「伝票作成機能の実装」です。

 

 この実装では、以下のようなデータの処理の流れを想定して作りました。

f:id:technoship0329:20220216225914p:plain

 「出荷先」、「出荷日」、「伝票番号」、「送り状ナンバー」

の4つは伝票情報として、「slipsテーブル」へ保存します。

 

 そして、「品番」、「色」、「数量」、「備考」の4つを一つの出荷商品情報

として、計10個までの商品を一括で「ordersテーブル」へ保存できるようにします。

 

app/models/slip.rb

f:id:technoship0329:20220216230400p:plain

 コード上では、まずslipモデルにて、

has_many :orders」でアソシエーションを定義した上で(orderモデルの方は「belongs_to :slip」)、「accepts_nested_attributes_for :orders」と記述する

ことで、ordersテーブルへの一括登録のためのデータの通過を許可します。

この記述は後ほど登場する「fields_forメソッド」に活きてきます。

 

app/controllers/slips_controller.rb

f:id:technoship0329:20220216231350p:plain

 次にslips_controllerにて、slipモデルのインスタンスを生成した上で、

一括登録のために必要な数だけorderモデルのインスタンスも生成します。

 

 次に新規作成画面のビューを作成します。

こちらは「fields_forメソッド」を駆使して、必要な数だけ商品登録用の

フォームも生成できるようにします。

 fields_forメソッドの使い方については、以下のサイトが参考になります!

ryucoding.com

 

実際のコード画面↓↓

app/views/slips/new.html.erb

f:id:technoship0329:20220221175001p:plain

fields_for :orders」と記述していることにより、

Slipモデルに関するフォームが作成されると同時に紐づくOrderモデルに関する

フォームを作成することができます。

今回はslipsコントローラーで10回Orderモデルのインスタンスを生成しているので、

10セット分のフォームが作成されます。

 

 次にデータ保存の記述です。

slipsコントローラーにおいて、以下のように記述します。

 

app/controllers/slips_controllers.rb

f:id:technoship0329:20220221175826p:plain

f:id:technoship0329:20220221175839p:plain

ストロングパラメーターの設定方法が、

「テーブル名_attributes: [:カラム名, :_destroy, :id]」

と付け加えることで、ordersテーブルに保存するべき商品情報も一緒に保存できる

ようになります。

 


 実装にあたっては、以下のサイトを参考にさせていただきました!!

qiita.com

 

 

この2週間のまとめ

 この2週間を一言でまとめると、

 

 「粘り強さが大切」です。

 

 今回の「伝票作成機能」の実装は、

一つのフォームから複数のテーブルへ保存する+一括登録がある

という複雑な実装だったので、

正直処理の流れを理解するまでに時間がかかり、実装を諦めようかと

思いました💦💦

 

しかし、

何が分かっていないのか

を紙に一つ一つ書き出し、一つ一つ解決していくことで

気がついたら実装が完了していました。

 

私の経験上、分からなくてつまづきそうな時は

大体「何が分からないのかがハッキリしていないこと」

が原因だと考えています。

 

だからこそ、今回の経験でも学びましたが、

分からないことが分からない

という状況を無くすことがとても大切だと思います!!

 

 

次回の目標

 今回は前回の執筆から2週間経過してしまっているので、

残りの「伝票出力機能」も大詰めに差し掛かっています。

 

 ということで次回(2/27ごろ)の目標は、

 

 「オリジナルアプリの実装&&デプロイ完了🎉」

 

 とします!

 

 

f:id:technoship0329:20220216220648p:plain



 

 ラストスパート頑張ります!!

 

 次回もお楽しみに!!

 

 

テクノシップ第6号プチ編集後記

〜エラー解決が終わらず、手が止まってしまった時、

 なぜか

 大好きな「Led Zeppelin」の音楽を聴いてリラックスすると

 解決のためのアイデアが湧きます。

 つまづいた時こそ、リラックスする精神が大切なんですかね。〜

 

f:id:technoship0329:20220102193453p:plain