【チーム開発】本日の進歩状況2020-07-15

・本日の作業

正直にいうと特に作業はできず調べものがメインの1日でした。

やったことと言ったらmasterにマージされている分を本番環境にアップしたのと

商品出品機能の商品投稿してテーブルに保存までの機能のプルリクエストをやったくらい。

でも本番環境へのアップ特に問題なく終わってよかったです。ローカルでは動いても本番環境ではエラーでまくることがあるとか聞いたことあったので内心ドキドキでした。

 

・現状の課題

①画像登録時のマークアップjQueryと上手く連動できていない。

⇨画像登録した後のマークアップを行ったあとjavascriptの記述を考える。

②商品出品・購入済み状態を判別できるようにする。

⇨productテーブルにそれ用のカラム(statusとか?)を作り、「0だと出品中」、「1だと購入済み」と定義して出品する際は0として保存するようにcontroller及びviewを作成すればいいのかな?もう少し調べて時間があったらメンターさんに相談してみます。

③カテゴリー選択するときに選択した内容によってはサイズを入力する欄が出てくる。

⇨よくよくTrelloのカードを見てみるとカテゴリー機能実装っていうカラムがあったのでそっちの方でやればいいかな。というかjavascriptで表示するのもそのときにやればよかったぽい。カテゴリー欄作ってるとき、カテゴリーだけで作業内容盛り沢山だなって感じたのですが、その感覚は間違いではなかったようです(笑)

④ブランドの登録方法

⇨商品登録するときにテキストで入力してbrandテーブルに保存するんではなくて、カテゴリーのように(多段階層ではなく単純なデータとして)事前にブランド名を登録しておいて、それを外部キーとしてproductに登録した方がしっくりくる気がします。ブランドを事前に入力するのが面倒と言えば面倒ですけど。

タグつけ機能のように入力して一致するものがあればそのIDを持ってきて、そうじゃなければデータベースに保存っていうのが本当は一番ですけどそれは追加機能的な感じでいいかなと。データベースに保存するのは変わらんのですし。

課題としてはこんな感じです。上から順番に解決していければと思ってます。

 

 

取り敢えず明日は、プルリクエストが通ってmasterにマージできるといいな。

 

【チーム開発】本日の進歩状況2020-07-14

・本日の作業

今日は仕事終わってからの作業のためあまり時間がかけられず、

image投稿機能がイメージ通りの動きになるようにjQueryとHTMLをいじってましただけで終わりました。

最初よりいい感じになってるんですけどなかなか上手くいかない。

 

この画面から画像を登録すると

 

こうなります。

 

1枚目の画像が隣にきてくれるようにはなったんですが次のファイルの指定がなぜか右側に。

2枚目を登録すると1枚目の画像の下にきてしまったり。まだまだ不具合続きです。

マークアップ自体を登録する前の物しか作ってなかったので、どういうHTMLとCSSにすればいいかイメージができてないんだろうな。

画像をアップロードしたときのマークアップをちゃんとした後にjQuery側の動きを考えようかと思います。

JavaScript関係はやっぱり難しいです。でも理解できたらいろいろできそうで面白そう。少しでも理解できるように頑張りたいです。

 

 

 

【チーム開発】本日の進歩状況2020-07-13

・本日の作業

まず昨日のエラー解決から。

エラーのことはエラー文に書いてあるとはよく言ったもので、昨日のエラーも本当にそのまま書いてありました。

ActiveRecord::RecordNotFound in ProductsController#get_category_children

Couldn't find Product without an ID

要約するとProdoctsControllerのget_category_childrenでProductのIDが見つかりませんよっていうエラーでした。

何でProductのID探してるんだろうと思ったのですが、コードをよくよく見返してみると、before_actionでset_product(productの登録情報を取得してくるメソッド、private以下に記述していた)を設定していたなーっと。exceptで対象決めていたのでcategory実装時に作ったget_category_childrenは記述していませんでした。

exceptの中にget_category_childrenともう一つ作成していたメソッドを記述したらエラーはなくなり、無事非同期で動的変化選択ボックスを実装することができました。

できたと思い早速投稿だーっと項目を全部入力した後、出品ボタンを押して保存できるか確認したのですが保存できず。。。

parameterは全部送られているようだったので何が原因か全然分からず、メンターさんにチャットで相談、すぐ原因を指摘してくれました。

やはりエラー文、コンソールだけでなくターミナルの方も良く見ないといけないようです。とは言っても自分で見てても全然わからなかった。メンターさんってやっぱり凄いです。

 

エラーの原因がselectフォームの選択肢に指定していた@category_parent_arrayをcreateアクション内で定義していなかったことが原因だったようです。

原因がわかったのであとは解消法を考えるだけなのですが、それがまた時間かかりました。

ただ単純にnewしてparamsくっつければ良いわけではないだろうしどうすれば良いのかといろいろ探しまくりました。で、見つけたのがこの記事

https://qiita.com/manbolila/items/7c44142de50093470580

まんま同じ物を作成しているんですけど、先日見つけた記事とは実装方法が少し違いました。

これをヒントにちょこちょこ変更したらJavaScriptの動作も商品情報の登録もできました。

で、参考記事とかメルカリとかいろいろ見てて気付いたのですが

本家ではカテゴリーの孫要素まで選択すると、サイズっていう入力欄が出てくるようになっているようです!?追加実装でいいかな?ダメかな?

 

取り敢えず明日は画像投稿欄の表示の修正をしたいと思います。

今の状態だと画像を登録すると変なところに画像がきてしまうのでJavaScript、HTML、CSSを見直す必要があるので。

上手くできるか不安だけど、いい勉強になると思って頑張ろ!

 

【チーム開発】本日の進歩状況2020-07-12

・本日の作業

 今日やっとcategoryの実装に入りました。

 まずancestryを使って多段階層カテゴリーを作成しました。Qiitaの参考記事ではancestrymのように経路(Path)をカラムで管理して経路基準で表示させるDB設計のことをPath Enumeration(経路列挙型)というそうです。DBの設計方法といろいろあるんですね。勉強になります。

 ancestryのgemを導入してからCategoryモデルを作成、ルーティングやら設定後categoriesテーブルにデータを投入します。

db/seeds.rbというファイルにancestryのメソッドを用いてデータを挿入していくのですが

 

/seeds.rb

  lady = Category.create(:name=>"レディース")

  lady_tops = lady.children.create(:name=>"トップス")
  lady_jacket = lady.children.create(:name=>"ジャケット/アウター")

  lady_tops.children.create([{:name=>"Tシャツ/カットソー(半袖/袖なし)"}, {:name=>"Tシャツ/カットソー(七分/長袖)"},{:name=>"その他"}])
  lady_jacket.children.create([{:name=>"テーラードジャケット"}, {:name=>"ノーカラージャケット"}, {:name=>"Gジャン/デニムジャケット"},{:name=>"その他"}])

のように単純に列挙していく方法が一番簡単ですけど面倒です。いろいろ調べていくとコードを書いて(:name=>)の記述を省略する方法がありました。

参考サイト

https://qiita.com/ATORA1992/items/617088f885117532454e

 コードが結構長いので参考サイトをどうぞみてください。

子カテゴリー、孫カテゴリーをそれぞれ配列として記述して、後からeachとかcreateでデータを作成するようです。考えた人は天才ですね。

・躓いているところ

データベースの登録を本家並にやると日が暮れそうなので、レディースとメンズのみ作成して実際の投稿機能実装に移りました。ほぼそのままの参考サイトも見つけたし楽勝かと思ったのですがなかなか考えが甘かった。

参考サイト

https://qiita.com/ATORA1992/items/bd824f5097caeee09678

やはり自分自身のJavaScriptの理解が甘すぎるせいで全然エラーが解決できません。

カテゴリー選択時に親カテゴリーの表示はできたのだけれど、その後親を選択するとエラーが出てます。最初からエラーの嵐、スペルが間違っていたためのエラーは大体なくなったと思うのですが、現在は

「カテゴリー取得に失敗しました」という エラーとともに

ActiveRecord::RecordNotFound in ProductsController#get_category_children」

「Couldn't find Product without an ID」

というエラーが。作成したget_category_childrenメソッドでcategoryから選択した親カテゴリーを探して、その子カテゴリーを取得するっていうメソッドだと思うのですが、親が見つからないようです。

どうすれば良いんだ。取り敢えず明日ちょっと考えてメンターさんに相談してみようかと思います。

【チーム開発】本日の進歩状況2020-07-11

・今日やったこと

brandの投稿登録実装を行ってました。昨日書いたようにタグ付けの要領なのかと思ったのですがタグ付の方は多対多を想定しているため、そのまま今回のケース(1対多、しかもbrand has_many products)に当てはめることはできなさそうです。

取り敢えずproductとbrandのデータをそのまま結びつけるためにhas_oneの関係にしてbrandテーブルに保存できるか試してみました。

imagesとの関連づけのようにただaccepts_nested_attributes_forを付ければ良いかと思っていたのですが意外にそうじゃないようです。

viewの記述方法とcontrollerの記述が少し違う、しかもちょっと違うだけでフォームがviewに表示されなくなるという。

https://qiita.com/nakasato_minami/items/5015319292c9f8a93f34

何とか参考サイトのお陰で実装はすみました。has_oneって結構奥が深いです。

 

・躓いているところ

brandの登録実装はアソシエーションを変えてむりくり実装しているのでこれだとダメだろうなー

理想的な仕様としては

①ブランドフォームに出品者が任意にブランド名を入力

②brandのDBに入力したブランド名が既に存在する場合はbrand_nameをDBから取得して紐付ける

③存在しない場合は新たにbrand_nameを作成し紐づける

という感じなんでしょうけど結構大変そうです。

昨日投稿したのとは違う参考サイトですがこれも多対多です。

https://qiita.com/ryutaro9595/items/042a1ec713c8c1f2c1d6

一旦ブランドのことは置いといて明日はカテゴリー実装を行いたいと思います。

JavaScript上手くできるかが今からすごい不安です

【チーム開発】本日の進歩状況2020-07-10

・本日の作業

昨日はカテゴリー以外のformを実装をしたのですが、出品ボタンを押してもデータが保存されませんでした。本日はどのカラムが悪さしているのを検証してみました。

enumで実装したconditonカラムとpostageカラムの部分が悪いのかbrandの作成方法が悪いのか、よく分からなかったため、データ保管の確認ができていた部分(画像、商品名)以外のマイグレーションファイル及び記述を削除(バリデーションもimagesモデルとproductsモデル以外のは一旦削除)し、どのカラムの保存ができないのか順番に検討することにしました。

結果としてはenumで実装したconditionとpostageカラムは特に問題なかく保存されていました。ターミナルに表示されているParametersは英字だったのですが実際データベースに保存されているのは数字でした。enumで上手く変換してくれているみたいです。

・今後の課題

brandモデルへの保存をどうすれば良いのか悩んでいます。

fields_forでbrandsテーブルにデータを入力することはできると思うのですが、どうproductsテーブルと関連づけていけば良いのかがわかりません。1対1でそのままデータを直結させるなimagesでも使った accepts_nested_attributes_forでいける気がするのですが、brandが1でproductが多の場合はそう単純にいかない気がします。

発送元の地域のようにselectで選択する方式にしてしまえば簡単ですが、それだと面白くないですし。

いろいろ調べてみるとタグつけの方法を見つけました。Qiitaのタグのように、入力もできるし、入力途中で同じような内容を選択できるようにする方法のようです。今回はこれに近い気がします。そうなると中間テーブルを作成する必要がありそうです。

https://qiita.com/tobita0000/items/daaf015fb98fb918b6b8

 

明日また挑戦していこうと思います!

【チーム開発】本日の進歩状況2020-07-09

・本日の作業

category以外の送信フォームを実装し保存できるか試してみたのですが上手く保存できず、redirectで出品ページに戻されてしまいます。

paramsの値をみてみるとenumで実装したconditionとpostageの値が数値ではなく文字として送られているようでした。

よくよくみてみるとenum_helpの_18nメソッドでselectフォームを実装すると文字情報が送られるようでした。

カラムの型をtextにしても保存できなかったので原因はそれ以外にもありそうです。

画像、商品名、商品説明、価格、商品の状態をenum_helpを使用しないで保存まではできていたのでその後に実装し始めたものに原因がありそうです。

明日いろいろ検証してみます!