30代プログラム初心者がWEBエンジニアになる

30代プログラム初心者が、WEBエンジニアになるまでの奮闘を書いていきます。

テーブルにデータをID1から登録する

こんにちは、ぐっちと申します。

カテゴリーデータ用のSEEDファイルが完成し、意気揚々としていた所チームメンバーから「とても良いのですが、2回目以降SEEDファイルを実行した際に、IDが変わってしまうので他のテーブルデータと齟齬が生じてしまいます。どうにかなりませんか?」と言われました。

確かに2回目以降実行されても良い様に、ファイルの頭に

Category.delete_all

を記述していたのですが、IDまでは頭がまわりませんでした。

 

色々調べた所、SQLで ALTER TABLE `テーブル名` auto_increment = 1; を実行する事で、auto_increment 機能がリセットされIDが1から登録される様になると分かりました。

しかし、毎回ターミナルでコマンドを打つのも煩わしいので、何かないかさらに調べると、ActiveRecord::Base.connection.execute というActiveRecordで生SQLを使えるメソッドがある事が分かり

Category.delete_all
ActiveRecord::Base.connection.execute "ALTER TABLE `categories` auto_increment = 1"

を記述し、何度SEEDファイルを実行してもテーブルの内容が変わらない様にする事が出来ました。

 

今回も便利なメソッドがある事が分かりまた1つ勉強になりました。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています

@Yamaguc45844169

 

gem ancestry でカテゴリーデータを用意

こんにちは、ぐっちと申します。

SEEDファイルをファイル名指定で実行できる様になり、ようやくカテゴリーデータの用意に入りました。

category.rbファイルを作成し、テーブルに登録するデータを記述します。

ancestry では、.childrenと記述する事で親子関係が作成されます。

 

例)おもちゃカテゴリーがあり、男の子向け・女の子向け、男の子向けからプラモデル・ラジコンがあった場合

toys = Category.create(name: "おもちゃ")
boy = toys.children.create(name: "男の子向け")
boy.children.create([{name: "プラモデル"},{name: "ラジコン"}])
ledy = toys.children.create(name: "女の子向け、")

と記述する事で

f:id:Yamaguchi-T:20190913193801p:plain

この様なレコードが出来、ancestryカラムに自動で親のIDが入ります。

孫カテゴリーには 1/1 と親/子のIDが登録されます。

これによって1つのテーブルで、親・子・孫データが管理できるというわけです。

 

そしてひたすらカテゴリーデータを記述して、合計1328レコード分のデータが出来ました。カテゴリーデータ多すぎます……

 

大変でしたが、また1つ便利なgemの使い方が勉強出来ました。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています

@Yamaguc45844169

rakeタスクについて

こんにちは、ぐっちと申します。

SEEDファイルを指定して実行する為に、rakeタスクについて調べました。

 

そもそもRakeタスクとは、ターミナルなどのコマンドライン上からアプリケーションを実行できる機能の一つで、私がよく使っていたrake routesも標準で装備されたRakeタスクに当たります。

また、自分でタスクを作成することが可能となっています。

 

今回はSEEDファイルをファイル名を指定して実行させたいので、まずはコマンドでファイルを作成しました。

$ rails g task seed

これでlib/tasks/seed.rakeが生成されるのでこのファイルに処理を書きます。

以下が記述したコードです。

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
desc "db/seeds/ ディレクトリからシードデータを読み込む"
task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
load(file)
end
end

 

まずdb/seedsディレクトリを作成し、そこにSEEDファイルを追加していきます。

そして、$ rake db:seed: ファイル名 を実行する事により実行出来ます。

 

同じ事をやりたい人はいる様で、調べると色々記事が出てきて実装出来ました。

ただ、SEEDファイルを作るのがまた大変でした……

次回はカテゴリーデータを用意する所を書きたいと思います。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています

@Yamaguc45844169

 

 

 

 

SEEDファイルの使い方

こんにちは、ぐっちと申します。

今回はSEEDファイルについて書きたいと思います。

Gem ancestryを使用するにあたり、データをSEEDファイルで用意するのですが、使用した事が無かったので、調べました。

 

SEEDファイルはテストデータや固定データをテーブルへ登録する際に使用する様で、db/seeds.rbが最初から作成されています。

実行する際は、ターミナルで $rake db:seed コマンドを打てば良いです。

 

今回のカテゴリーデータの様に、テーブルのデータが滅多に変化しない場合や、数が多い場合はSEEDファイルでデータを用意すると良いです。

 

しかし、SEEDファイルは一つなので、そこに複数のモデルの記述を書くと扱い辛いと思い、モデル毎で複数のSEEDファイルを作成し、個別で実行出来ないかと思い調べると、どうやら今度はrakeタスクというものを使用すれば出来る様で、次はrakeタスクについて調べました。

 

と言う訳で次回はrakeタスクについて書きたいと思います。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています

@Yamaguc45844169

カテゴリーデータの作成

こんにちは、ぐっちと申します。

最終課題のチーム開発でプログレスバーの作成が終わり、次に取り組んだのがカテゴリーデータの作成です。

このカテゴリーデータ作成で幾つか、新しく使用した技術があったのでそれについて書いていこうと思います。

 

カテゴリーは、商品を検索し易くする為にあり、例えば 本・おもちゃ・ゲーム・インテリア等のカテゴリーがあり、さらに本の中に 小説・漫画・雑誌があり、漫画の中に少年漫画・少女漫画・青年漫画があるというものです。

 

データベース設計時点では、カテゴリーが三階層なのでテーブルも3つ用意して、データを管理すると思っていたのですが、gemでancestryというものがあり、このgemを使用する事で1つのテーブルでデータの親子関係が管理出来る様で、これは使用するべきだと思いancestryについて色々調べました。

 

テーブルへのデータ保存にはseedファイルを使用する事や、親子関係を持たせる為の記述の方法等が分かりました。

今までseedを使用した事はなかったので、そこから勉強する事になりました。

次回はそのseedについて書こうと思います。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています(@Yamaguc45844169

プログレスバーの作成

こんにちは、ぐっちと申します。

データベース設計が終わり、次はプログレスバーの作成をする事になりました。

プログレスバーとはこの様なもので ↓

f:id:Yamaguchi-T:20190830193034p:plain

全体のステップと現在どの位置に居るのかが、視覚的に分かるものです。

 

どの様に実装するのか色々調べていて、CSSをページ毎に適用するやり方を見つけ、その方法で実装する事にしました。

 

CSSをビュー毎に適応させる方法は

/config/initializers/assets.rb に

Rails.application.config.assets.precompile += %w( hoge.scss )

を記述し

適応させるビューファイルに

= stylesheet_link_tag 'hoge.scss'

を記述すれば良いので

部分テンプレートで灰色のバーを作り、各ビューで色を付けたCSSを適応させれば、プログレスバーが完成しました。

 

やり方が分かれば特に難しい事は無く、スムーズに作成出来ました。

今後サーバーサイドの作業に入っていくと、段々と作業が難航しそうですがチームで協力して乗り越えて行きたいです。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています(@Yamaguc45844169

 

フォローし合う事が大事

こんにちは、ぐっちと申します。

先週から最終課題のチーム開発に入り、データベース設計を担当する事になりました。

最初は全く出来る自信がありませんでしたが、一つずつ図に書いていくうちに何とか形になって来ました。

一番悩んだのは、カラムのオプションでインデックスや外部キー制約、デフォルト値、ユニーク等様々な事を考えて設計をしなければならず、頭がパンクしそうでした。

それでもチームメンバーからの助言なども有り、1回目のスプリントレビューに間に合う事が出来ました。

私もエラー解決の助言等をして、メンバー同士で中々フォローし合えていたと思います。

因みに私が考えたデータベースはこの様な感じになりました。

f:id:Yamaguchi-T:20190826192519p:plain

 

スプリントレトロスペクティブで色々見えて来た事も多く、次に活かして行きたいと思います。

 

ここまで読んでくださり、ありがとうございました。

 ツイッターで日々の学習をつぶやいています(@Yamaguc45844169