バリケンのRuby日記 RSSフィード

2007-04-20

[][] 「嫌なこと書き貯めWebアプリ」を作ろう(3)  「嫌なこと書き貯めWebアプリ」を作ろう(3) - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  「嫌なこと書き貯めWebアプリ」を作ろう(3) - バリケンのRuby日記  「嫌なこと書き貯めWebアプリ」を作ろう(3) - バリケンのRuby日記 のブックマークコメント

昨日のエントリの続きだよ。

値の設定

きょうはカーディナリティ(「1対多」とかの数量の関連性)の設定をしてみようとおもったけど、空っぽデータベースに設定するよりも実際に値が入っているデータベースのほうがわかりやすいよね。

じゃあ、昨日つくったデータベースに値をいくつか設定してみよう!

まずは、Railsデバッグ用のコンソールを立ち上げよう。コマンドプロンプトからプロジェクトディレクトリ

ruby script\console

入力してね。うまくいけば、次のように表示されるはずだよ。

C:\rails\magica>ruby script\console
Loading development environment.
>>

このコンソールは、Rubyirb(インタラクティブRuby)と同じようなものなんだけど、Rails関係ライブラリや前回作成したデータベースへのアクセス用のクラスなんかを自動的に読み込んだ状態になっているよ。

じゃあ、実際に値を設定してみよう!

と、その前に日本語関係環境変数の設定とライブラリの読み込みをするよ。

$KCODE = 's'

require 'kconv'

$KCODE = 's'」はコマンドプロンプトの入出力漢字コードシフトJISであることを表しているよ。そして「require 'kconv'」で漢字コードを変換するライブラリを読み込んでいるよ。

ようやく準備が整ったから、値を設定してみよう!まずはCardDetailクラスだよ。

最後が,仕事上の不安を書き込む「もやもや」カードである。従来のバージョンでは「大変」カードと呼ばれていたものに相当する。「たいへん」「ひやひや」「もやもや」「いらいら」「こまった」「きになる」の中で該当する項目にチェックを付け,不安の原因と内容を記述する。

「仕事の流れをマンガ風にまとめよう」,スターロジックが業務分析ツールの新版「マジカ!」をお披露目:ITpro

とあるから、「たいへん」「ひやひや」「もやもや」「いらいら」「こまった」「きになる」という文字列を名前(name)として値を登録していくよ。

[[1,'たいへん'],[2,'ひやひや'],[3,'もやもや'],
 [4,'いらいら'],[5,'こまった'],[6,'きになる']].each do |i|
  CardDetail.create(
    :id => i[0],
    :name => i[1].toutf8
  )
end

ちょっと解説。ActiveRecord::Baseクラスのcreateクラスメソッドは、そのクラスに対応するデータベースのテーブルに値を作成するよ。値をセットするには、それぞれの属性に対応するハッシュのキーに対して値を渡してあげればいいんだよ。

あと、データベースに保存するときにString#toutf8メソッドを使って文字列をUTF-8に変換しているよ。

こんな感じで、ほかのテーブルにも値を設定していこう!

[[1,'バリオ'],[2,'バリト'],[3,'リバ'],
 [4,'バリミ'],[5,'バリコ']].each do |i|
  User.create(
    :id => i[0],
    :name => i[1].toutf8
  )
end

[[1, 2, 'バリトとのけんか', 'なわばりがせまいから'],
 [2, 5, 'バリミがつついてくる', 'なんでだろ?'],
 [3, 4, 'バリオがうっとおしい', 'バリオが水浴びして上がってきたあと、水しぶきがあたる'],
 [4, 6, 'バリミが好きなのに気づいてくれない', 'バリミはリバのことが好き?']].each do |i|
  Card.create(
    :id => i[0],
    :card_detail_id => i[1],
    :content => i[2].toutf8,
    :cause => i[3].toutf8
  )
end

設定した値を参照する方法はいろいろあるけど、たとえば

puts User.find(1).name.tosjis

とすればUserテーブルのひとつめの値のname属性を、

User.find(:all).each{|i| puts i.name.tosjis }; nil

とすればUserテーブルのすべての値のname属性の値を出力するよ。

>> puts User.find(1).name.tosjis
バリオ
=> nil
>> User.find(:all).each{|i| puts i.name.tosjis }; nil
バリオ
バリト
リバ
バリミ
バリコ
=> nil
>>

今日はここまで。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070420