Ruby on Railsを基礎から学ぶ 第6回

Railsコンソールからのデータ投入とシードデータ〜

 

前回、マイグレーションにより、memberテーブルを作成しました。

これからこの会員用テーブルを使用して、会員用SNS風を作っていくわけですが、キーボードからコマンドを打って、データの登録・更新を行うのは、WindowsなどGUI馴れしている私たちにしてみると、ちょっと心もとないです。

そこで、今回は、まずDBGUIを使用して、実際に前回作成したテーブルを覗いてみて、それからrailsコマンドでデータ更新をしていくという流れで行きましょう。

 

では、始めます。

 

1.DBGUIから作成したテーブルを見てみる

 

まずここで、断っておかなければいけないのは、このサイトでは当面DBPostgreSQLを使用していくという点です。

MySQLなども後々手順を公開していきますが、しばらくはPostgreSQLでやります。

 

PostgreSQL DBはインストール時に一緒にpgAdminというGUIもインストールしてくれます。

万が一、導入されていない場合は、非常に単純な手順ですので、下記のサイトを参考にインストールしてみてください。

 

インストール支援サイト

lets.postgresql

PostgreSQLの導入と初期設定

http://lets.postgresql.jp/documents/tutorial/introduction/

直接ダウンロー^ドの場合は↓

pgAdmin Windows

http://www.pgadmin.org/download/windows.php

この中にある

?pgAdmin v1.16.1

をダウンロードしました。(情報は2013/5/20現在のものです。

もっと新しいのが出てる場合それでも良いです。)

 

こちらをインストールしてください。

ほとんど、Nextで行けます。

 

2.pgAdmin Vの使い方(画面説明)

 

Pgadminは、Windowsのスタートメニューからプログラム→PostgreSQL x.xpgadmin V

 

と進んでください。

下のような画面が出ています。

初めは赤枠のあたりは表示されていません。そこで、赤丸(PostgreSQL x.xをダブルクリックします。

DBユーザパスワードが聞かれます。

使用するユーザパスワードを入力してください。

忘れてしまった人は、コマンドプロンプトからユーザ情報を確認します。→こちら

 

これで、さっきの画面のようにたくさんブレイクダウンされた情報が出てきます。

赤線のように、memberというテーブルがあります。これこそ前回作成したmemberテーブルなのです。

 

3.railsコンソールからのレコード追加・更新

 

では、このpgadminで確認できたテーブルが本当にrailsと連動しているか、

もう少し確認してみましょう。

まず、rubyコマンドプロンプト上で、以下のコマンドを実行します。

 

>rails c

これは、rails consoleでもよいです。

まあrailsコンソールを開くということですね。

次に、あがってきたコンソール(コマンドラインは00:0>のような行番号で示される)

 

member = Member.new

 

これは、変数memberMemberモデルをnewしてできたインスタンスをセットしているのです。

Membermemberの大文字小文字の違いに良く注意!

このmember = Member.(メソッド)の書き方はこれから非常に良く使っていきますし、解説サイトでも良く使われます。

しっかり理解してください。

次にmemberの会員番号(ギルドナンバーと称しているが…)であるnumber1をセットします。

 

member.number = 1

 

これは、先ほど作ったMemberモデルのインスタンスmemberの一つ目の項目(列)numberをセットするという意味です。

ちなみにこの状態ではまだDBのテーブルには登録されていません

次のコマンドで実行するmember.saveでようやく登録となります。

少しメッセージが出た後、trueという戻り値が見えます。

これはsavetrue正常に終わったことを示します。

このtrue またはfalseが今後の画面更新などの分岐条件にしばしば使用されます。

ここもぜひとも見ておいてください。

 

コンソールの標準出力を貼り付けておきます。

C:\test_apl>rails c

Loading development environment (Rails 4.0.0.rc1)

irb(main):001:0> member = Member.new

=> #<Member id: nil, number: nil, name: nil, full_name: nil, email: nil, birthda

 0, administrator: false, created_at: nil, updated_at: nil, phone: nil>

irb(main):002:0> member.number = 1

=> 1

irb(main):003:0> member.name = "Thomas"

=> "Thomas"

irb(main):004:0> member.save

  [1m[36m (0.0ms)[0m  [1mBEGIN[0m

  [1m[35mSQL (1812.5ms)[0m  INSERT INTO "members" ("created_at", "name", "num

at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", Wed, 15 May 2013 07

00], ["name", "Thomas"], ["number", 1], ["updated_at", Wed, 15 May 2013 07:18:31

  [1m[36m (78.1ms)[0m  [1mCOMMIT[0m

=> true

irb(main):005:0> exit

 

 

ここまででいくつか使用したコマンドがありましたが、これはrubyのソースコードをじかに実行しているのです。

今後DBを使用したコーディングを行う際に、たとえばmembernumberだけ変更したいとなれば、

上述のコードがそのまま使用できます。

どうせpgadminでテーブルの中身いじれるだろうと高を括らず、覚えましょう。

 

さて、pgadminで確認してみます。

おそらくpgadminは閉じていないと思うので、見てみましょう。

下のように。Memberテーブルで右クリック→データ→先頭100行の表示と進みます。

 

こんなかんじです。

どうです。さっきのレコードだったでしょう。

ここで、ポイントとなるのは、memberテーブルには、管理者権限(administrator)が必須だったはずですが、

これはfalseとなっています。

前回のテーブル作成時に、管理者権限は初期値でfalseとしているので、自動的にセットされているのです。

そのため、numbernameの2つをセットしておけば、レコードとして成立します。

仮に、numberだけセットして、nameをいれないmember.save(登録)しようとすると、怒られます。

 

4.シードを利用したレコード追加

 

Dbcreateしたときに、以下のフォルダにシードデータ用のrbファイルが作成されていることに気付きます。

 

C:\test_apl\db

       seeds.rb

# This file should contain all the record creation needed to seed the database with its default values.

# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).

#

# Examples:

#

#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])

#   Mayor.create(name: 'Emanuel', city: cities.first)

 

中身を見ると、コメントしか書かれていませんが、

ここに元となるデータ(初期投入データ)をrailsで記述できるようになっているわけです。

今回は、参考文献オイアクス製簡易エータ作成コードを引用します。

 

table_names = %w(members)

table_names.each do |table_name|

  path = Rails.root.join("db/seeds", Rails.env, table_name + ".rb")

  if File.exist?(path)

    puts "Creating #{table_name}..."

    require path

  end

end

 

これは、dbフォルダの下のseedsフォルダに、モデル名と同じrbファイルがあれば

それを実行し、テーブルに投入する流れとなっています。

以下のように、members.rbというファイルを作ります。

 

C:\test_apl\db\seeds\development

members.rb

# coding: utf-8

 

names = %w(Taro Jiro Hana John Mike Sophy Bill Alex Mary Tom)

fnames = ["佐藤", "鈴木", "高橋", "田中"]

gnames = ["太郎", "次郎", "花子"]

0.upto(9) do |idx|

  Member.create(number: idx + 10,

    name: names[idx],

    full_name: "#{fnames[idx % 4]} #{gnames[idx % 3]}",

    email: "#{names[idx]}@example.com",

    birthday: "1981-12-01",

    gender: [0, 0, 1][idx % 3],

    administrator: (idx == 0)

  )

end

 

 

いくつかの姓名の素とデフォルトのありうる値を使って、

たすきにかけるようにバリエーションを作って10レコード分ユニーク(単一)なデータを作っているものです。

 

シードは実際はもう少し具体的な例を入れていくのですが、テストデータ作成としてはありな方法だと思います。

この状態で、rubyコマンドプロンプトで以下のrakeタスクを実行します。

 

Ruvyコマンドプロンプト

C:\test_apl>rake db:seed

Creating members...

 

実際のシードデータは、おそらく、CSVファイル入力とフォーマット変換、バリデートチェックなどをrubyで行い、

DBにつ込むという移行的なしっかりとしたものを作るものと思われます。

住所マスタや、ユーザさんの部署テーブル、権限テーブル。特にユーザ参照先が複雑なデシジョンテーブルになるような場合、

いくつかのプログラムを組み合わせるといった場合も出てくるでしょう。

これら移行手順については、このサイトでは触れません。

また機会があれば、どこかで話したいと思います。

 

5.pgAdminのビューで確認する

 

また、pgAdminでグラフィカルに確認します。

ちなみに下記のように、修正したいカラム(セル)でダブルクリックすると編集できます。

ここでは、「高橋 花子」を「高橋 花」にしました。

 

「花」という最近っぽい名前になりました。

 

工事中.PostgreSQLへのインポート

 

初期データはなれないうちは、railsで入れるのは大変でしょうから、CSVなどでいれられるとよいですよね。

このあたりにpgAdminのインポートも追加したいですね。(お待ちください。)

 

なんか説明するまでもなさそうな感じなんで、CSVなどでテストデータ作って、やってみてください ←おい!

 

おまけ.マイグレーションのし忘れメッセージ

 

マイグレーションをし忘れると、こんなメッセージが出ます。

念のため、掲載します。

 

C:\test_apl>rake db:seed

You have 1 pending migration:

  20130515021824 HogehogeMembers

Run `rake db:migrate` to update your database then try again.

 

もし、し忘れがあったら、マイグレーションも実行します。

前回説明したし忘れを検地するrakeコマンドもあわせて確認してください。

 

 

ということで、おしまいです。

次回は、検索とrailsコンソールからのSQLの発行のしかたをやります。

 

 

C:\test_apl>rake db:version

Current version: 20130515013616

 

C:\test_apl>rake db:abort_if_pending_migrations

You have 1 pending migration:

  20130515021824 HogehogeMembers

Run `rake db:migrate` to update your database then try again.

 

 

 

     参考テキスト■

サ改定新版 基礎 Ruby on Rails オイアクス監修 インプレスジャパン

http://www.oiax.jp/rails3book

     参考サイト

PostgreSQLの導入と初期設定

http://lets.postgresql.jp/documents/tutorial/introduction/

pgAdmin Windows

http://www.pgadmin.org/download/windows.php

 

 

戻るとっぷ次へ

 

Raccoon's homepage Copyright (C) 2000-2013 あらいベアー