かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[NetBeans][Ruby]従業員管理システムのようなものを作ってみよう

先日なんとか動くところまでこぎつけたので、練習がてら超簡単なWebアプリを作ってみようと思う。
とりあえず、従業員を管理するシステムにしてみよう。

従業員は、従業員番号と従業員名と入社年月日を持ってるという軽いノリです。

早速NetBeansを起動!!Railsプロジェクトを作る前に、とりあえずデータベースだけ作成しておきます。
使用するデータベースは、NetBeansにくっついてくてるJavaDBを使うことにるす。とりあえず起動をかける。
image

起動すると、NetBeansの出力ウィンドウにメッセージが表示される。それを確認したら、DBの作成だ。
DBもJavaDBで右クリックしてCreate DatabaseでOK。
image

empmng_developmentとempmng_testという2つのデータベースを作成する。
DBを作成すると、作成したDBに対する接続の設定も追加される。
image

ここに接続をあらかじめ登録しておくと、Railsのプロジェクトを作るときに楽になる。
ということで、Railsのプロジェクトを作成する。新規プロジェクトからRuby on Rails Applicationを選択する。

プロジェクト名をempmngにして、次へ。
データベースを、どれにするか聞かれるので、さっき作っておいたDBを選択する。
ついでに、下のほうにあるJDBCを使用するという部分にチェックを入れておくのも忘れない。
image

Finish!をクリックするとRuby on Railsのプロジェクトがもっさりと作られる。
まぁNetBeans5.5までのもっさり感に堪えてきてる人にとっては超高速に感じるくらいになってる。

いっぱいファイルとか作ってるからこんなもんなんだろう。
下が作られたプロジェクトと、DBへの接続情報のかかれたdatabase.yaml
image image

いい感じ。
ここからやっとプログラムつくりに入る。

まずは、アプリケーションの土台となるモデル。モデルが無いことには個人的には始めにくい。
プロジェクト名あたりで右クリックして、Generateを選択する。
image

モデルのジェネレータを選択して、引数にEmployeeを入力する。
ここに入力したものの複数形がデータベースのテーブル名になるという仕様だ。

image

これも完了を押すと、Outputウィンドウにつらつらと生成されたものが表示される。
これで、モデルが出来上がり。

最初のほうで決めたけど、この従業員は、従業員番号と従業員名と入社年月日を持っているということだった。
なので、これを作りにかかる。


Database Migrationsのmigrateの下に001_create_employees.rbというファイルができている。
image 
ここに、テーブルが持ってるカラムの定義を足す。
さっきのGenerateで、したのような感じのファイルが出来上がってると思う。

class CreateEmployees < ActiveRecord::Migration
  def self.up
    create_table :employees do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :employees
  end
end

ここのself.upメソッドにカラムの定義を追加する。

class CreateEmployees < ActiveRecord::Migration
  def self.up
    create_table :employees do |t|
      # 従業員番号!nullはだめよ
      t.column :emp_no, :string, :null => false
      # 従業員名!nullはだめよ
      t.column :name, :string, :null => false
      # 入社年月日!nullはだめよ
      t.column :ent_date, :date, :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table :employees
  end
end

これで、モデルのカラムとかの指定ができたので、DBにテーブルを作りにかかる。
テーブルを作るのは、さっき書いた001_create_employees.rbの定義に従ってさくっとやってくれる。

プロジェクト名あたりで右クリックして、Migrate DatabaseのTo Current Versionを選ぶとデータベースにテーブルを作ってくれる。
楽チン。
image

Outputウィンドウには、下のように表示される。

(in C:/Users/Kazuki/Documents/NetBeansProjects/empmng)
== 1 CreateEmployees: migrating ===============================================
-- create_table(:employees)
   -> 0.2434s
   -> 0 rows
== 1 CreateEmployees: migrated (0.2439s) ======================================

ちなみに、これは開発用のデータベースempmng_developmentに作成されている。
本当に作成されてるのか見てみると…

image

ばっちりできてる。
ここらへんで、簡単に動きをみてみようと思う。
プロジェクト名で右クリックしてRails Consoleを選択すると、jirbが立ち上がる。
ここにぱちぱちと打ち込んでいく。

?> emp = Employee.new :emp_no => 'A001', :name => 'Tanaka Taro', :ent_date => Date.today
=> #<Employee id: nil, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: nil, updated_at: nil>
>> emp.save
=> true

これでデータの登録完了!引き続き、ちゃんと登録できたか見てみる。
これは、findメソッドでできる。

>> Employee.find :all
=> [#<Employee id: 6, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:49:57">]

これもOKだ。続いて、Tanaka TaroをTanaka Ichiroに変えてみる。

>> emp = Employee.find 6
=> #<Employee id: 6, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:49:57">
>> emp.name = "Tanaka Ichiro"
=> "Tanaka Ichiro"
>> emp.save
=> true
>> Employee.find :all
=> [#<Employee id: 6, emp_no: "A001", name: "Tanaka Ichiro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:53:09">]

ちゃんとDBへの読み書きができてる。素敵だ。

続いて、コントローラを作ろうと思う。コントローラの名前もモデルにあわせてEmployeesで作る。
Generateでcontrollerを選択して、Employeesと入力してOKを押す。
そうすると、したのようにコントローラの雛形が出来上がってる。

class EmployeesController < ApplicationController
end

ここにコードを書いていく。
とりあえず、indexというメソッドを定義して、それを動かしてみよう。

コントローラでは、renderメソッドで、レスポンスに何を返すか色々指定できるっぽい。
とりあえず、お約束的なHello worldみたいなのを書いてみた。

class EmployeesController < ApplicationController
  def index
    render :inline => "Hello Rails Application"
  end
end

さて、ついにWebアプリケーション!!F6を押してWEBrickを起動する。
ブラウザのアドレスに、http://localhost:3000/employeesと入力してみると下のように、ブラウザに文字がちゃんと表示された。
image

よきことかな。
調子にのって、Employeesテーブルの中身を表示してみた。

class EmployeesController < ApplicationController
  def index
    # 全員取得
    employees = Employee.find :all
    # 名前のリストを取得
    name_list = employees.collect(&:name).join
    # 名前を画面に出してみる
    render :inline => "Hello #{name_list}"
  end
end

まだTanaka Ichiroさんしか入ってないので、それが表示されるだけだけど、ちゃんと動いてる。
image

お次はViewを作ろう。今のままだと、Controllerで見た目まで作ってる。本来Ruby on RailsではViewがこれを担当する。
よく見てみると、ControllerのジェネレータにViewsという入力欄があった。
もう一度コントローラのジェネレータを立ち上げて、NameにEmployees、Viewsにindexと指定してOKを押す。

image 

ジェネレータは、結構かしこいので、すでにあるものは手をつけずに、新たに作る必要のあるものだけ作ってくれるみたいだ。
今回は、下に表示させてる4つのファイルを生成してくれた。(ほかにもあるけど、今は使わない)
image

Viewができたので、コントローラからrenderメソッドを消す。
Railsは、デフォルトだとコントローラとアクションの名前から自動的にViewを対応付けてくれる。

今回の例だとemployees_controllerのindexアクションなのでViewsの下にあるemployees/index.html.erbが対象になるっていう寸法だ。
ためしにコントローラのrenderメソッドをコメントアウトして実行すると、employees/index.html.erbの中身が出ることが確認できる。

class EmployeesController < ApplicationController
  def index
    # 全員取得
    employees = Employee.find :all
    # 名前のリストを取得
    name_list = employees.collect(&:name).join
    # 名前を画面に出してみる
    # render :inline => "Hello #{name_list}" コメントアウト!!
  end
end

image

後は、コントローラからビューへのデータの受け渡し方さえわかれば、画面にデータを表示できそうな気がしてくる。
みてみると、コントローラのフィールド(@つきの変数ね)は、自動でView側から使えるという手はずになってるという。

ちょっと試しにやってみた。
コントローラの@nameに田中 太郎を代入して…

class EmployeesController < ApplicationController
  def index
    # とりあえず
    @name = "田中 太郎"
  end
end

Viewでそれを使ってみる。

<h1>Employees#index</h1>
<p>Find me in app/views/employees/index.html.erb</p>
<p><%= @name %> </p>

これで実行すると、ちゃんと田中 太郎が出てる!!
image

ということで、簡単に表形式で従業員一覧を出してみた。
コントローラでは、全従業員のデータを取得して@employeesという変数につっこんでるだけ。

class EmployeesController < ApplicationController
  def index
    # 全員を従業員番号でソートして取得
    @employees = Employee.find(:all, :order => "emp_no asc")
  end
end

Viewでは、それを使って表を組み立ててる。

<h1>従業員一覧</h1>
<table border="1">
  <tr>
    <th>従業員番号</th>
    <th>従業員名</th>
    <th>入社年月日</th>
  </tr>
<% @employees.each do |employee| %>
  <tr>
    <td><%= employee.emp_no %> </td>
    <td><%= employee.name %> </td>
    <td><%= employee.ent_date %> </td>
  </tr>
<% end %>
</table>

これを実行すると、下のように表示される。
タイトルが若干削れてるけど、それ以外はうまいこといってる。タイトルが削れてるのは、たぶんデフォルトであたってるスタイルシートが何かしてるせいだと思うので、とりあえずスルーしておく。
image

ついでなので、DBに何件かデータをつっこんでから再表示させてみた。
image

うん。いい感じだ。
長くなったので、今回はここまで。次回は、テストの仕方とかについてみてみようかな。

投稿日時 : 2008年5月3日 19:13

Feedback

# [NetBeans][Ruby]従業員管理システムみたいなものを作ってみよう その2 2008/05/04 0:53 かずきのBlog

[NetBeans][Ruby]従業員管理システムみたいなものを作ってみよう その2

# welded ball valve 2012/10/18 22:44 http://www.jonloovalve.com/Full-welded-ball-valve-

Absolutely composed subject material , regards for entropy.

# moncler online sale 2012/12/08 0:10 http://supermonclercoats1.webs.com/

Perfectly indited subject material , thanks for selective information .

# Christian Louboutin online 2012/12/08 12:01 http://mychristianlouboutinonline.webs.com/

I like this post, enjoyed this one appreciate it for putting up.

# longchamp canada 2012/12/14 22:36 http://www.longchampbagoutlet.info/category/longch

We found a great number of great DVDs that him and i were excited to see again. Over the course of a couple of months.

# エルメスのスカーフの販売 2012/12/15 15:35 http://www.hermespairs.info/category/エルメス

gripping channels of responses bursting in the photos.

# エルメスの販売 2012/12/16 21:13 http://www.hermespairs.info/category/エルメススカーフ

Thus, our shelves find themselves filled with what we like.

# michael kors soldes 2012/12/18 5:24 http://sacmichaelkorssoldes.monwebeden.fr/#/photos

If ones photostream is made up of photos which - even if good or possibly not -- triggered your spirited comments¡ä line.

# women burberry bag 2012/12/18 14:43 http://www.burberryuksale.org/category/bags-burber

Keep in the excellent job.

# burberry london 2012/12/18 14:48 http://www.burberryuksale.co/burberry-uk-bags-c-48

The only individuals would glance good wearing these fugly things might possibly be Ferrari gap crew within the pits:D

# burberry outlet 2012/12/19 13:28 http://burberryukoutlets.wordpress.com/category/bu

I go along with the pricey garbage review. I can't stand the start looking, sound or possibly feel of the Beats.

# longchamps 2012/12/22 17:26 http://sacslongchampsolde.monwebeden.fr

The stars of this pool might possibly be the comments and the pictures tend to be secondary.

# destockchine 2013/01/10 22:42 http://www.destockchinefr.fr/veste-marque-pas-cher

Any my brother most likely not a fellow worker, although a fellow worker have been a good solid my brother.
destockchine http://www.destockchinefr.fr/veste-marque-pas-cher/veste-ed-hardy-pas-cher/

# , 2013/01/14 4:41 http://www.destockchine.com/

Do not consult your favorite joy and happiness to 1 a smaller amount of successful unlike you.
, http://www.destockchine.com/

# destockplus 2013/03/03 14:45 http://www.g77.fr/

A buddy you just select utilizing gifts will probably bought from your family. destockplus http://www.g77.fr/

# Touslesprix 2013/03/03 14:45 http://www.g33.fr/

Romance, a friendly relationship, reverence, you should not join people today over a widely used hate meant for point. Touslesprix http://www.g33.fr/

# tt6262.com 2013/03/04 5:05 http://tt6262.com/

Take pleasure in is actually frail here at start off, nonetheless expands much more as we age with the price of accordingly fertilized. tt6262.com http://tt6262.com/

# www.c55.fr 2013/03/06 15:06 http://www.c55.fr/

In which there's always nuptials with out fancy, you can have fancy with out nuptials. www.c55.fr http://www.c55.fr/

# Air Jordan 4 2013/03/06 15:09 http://www.jordanretro4air.com/

Around the world you are a person, although to just one one you are our society. Air Jordan 4 http://www.jordanretro4air.com/

# casquette chicago bulls 2013/03/13 21:17 http://www.a77.fr/

Hardly ever scowl, even though one is downcast, given that you not know who's going to be dropping excited about a giggle. casquette chicago bulls http://www.a77.fr/

# casquette ny 2013/03/16 10:05 http://www.a44.fr/

To everyone there's a chance you're yourself, but one guy / girl there's a chance you're everybody. casquette ny http://www.a44.fr/

# destockhine 2013/03/17 10:11 http://www.b77.fr/

Into successfulness the best friends fully understand everyone; at misfortune could the best friends. destockhine http://www.b77.fr/

# destockchine 2013/03/24 0:41 http://d77.fr/

Relationships past if equally colleague considers brand-new areas such as hook favourable position throughout the additional. destockchine http://d77.fr/

# destockchine 2013/03/24 0:41 http://c99.fr/

For those who might store tip provided by an opponent, advise this task not to someone i know. destockchine http://c99.fr/

# usine23 2013/03/25 2:32 http://e55.fr/

Father‘metric ton waste matter your time and effort about a the human race/girls,which isn‘metric ton able to waste matter their time on you. usine23 http://e55.fr/

# zgg.fr 2013/04/07 6:15 http://www.zgg.fr/

Absolutely adore is definitely the basically sane and even good enough solution for a persons your life. zgg.fr http://www.zgg.fr/

# 100mg doxycycline https://doxycyline1st.com/
buy cheap doxycycline online 2022/02/26 8:19 Doxycycline

100mg doxycycline https://doxycyline1st.com/
buy cheap doxycycline online

# doxycycline generic https://doxycyline1st.com/
doxy 2022/02/26 20:00 Doxycycline

doxycycline generic https://doxycyline1st.com/
doxy

# paxlovid fda approval https://paxlovid.best/
covid medikament 2022/09/08 7:33 Paxlovid

paxlovid fda approval https://paxlovid.best/
covid medikament

# dating free chating https://datingtopreview.com/
local free dating sites 2022/10/17 20:35 Dating

dating free chating https://datingtopreview.com/
local free dating sites

# free dating sites no payment https://topdatingsites.fun/
best datings sites 2022/11/15 0:24 DatingTop

free dating sites no payment https://topdatingsites.fun/
best datings sites

# over the counter eye drops for pink eye https://overthecounter.pro/# 2023/05/08 18:13 OtcJikoliuj

over the counter eye drops for pink eye https://overthecounter.pro/#

# top canadian pharmacies https://pillswithoutprescription.pro/# 2023/05/16 4:43 PillsPro

top canadian pharmacies https://pillswithoutprescription.pro/#

# best non prescription ed pills https://edpillsotc.store/# - erectile dysfunction pills 2023/10/07 21:14 EdPills

best non prescription ed pills https://edpillsotc.store/# - erectile dysfunction pills

# ed meds online https://edpills.tech/# non prescription erection pills 2023/12/23 4:40 EdPills

ed meds online https://edpills.tech/# non prescription erection pills

# prednisone https://prednisone.bid/ 30mg prednisone 2023/12/27 6:53 Prednisone

prednisone https://prednisone.bid/ 30mg prednisone

タイトル
名前
Url
コメント