どくたーぺっぱーちぇりお

07<< 12345678910111213141516171819202122232425262728293031 >>09

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ubuntu11.04でRuby on Railsとsqlite3を接続するには 9/9

9.クラスの新規作成(rails generate)

DBテーブル(のモデルクラス)作成

rails generate model TABLENAME COLUMNNAME:DATATYPE COLUMNNAME:DATATYPE ・・・
このような書式になるらしい。

試しに、こんなテーブルを想定してみた。
テーブル名:siyaku
登録されたものが試薬かどうか?(yes / no)
管理コード番号(数字)
名前(文字列)

TABLE siyaku
siyaku:boolean
si_code:integer
si_name:string

これをrails コマンドで実行するとこうなった。
/opt/kanridb$ sudo rails generate model siyaku siyaku:boolean si_code:integer si_name:string
> invoke active_record
> create db/migrate/20110921061333_create_siyakus.rb
> create app/models/siyaku.rb
> invoke test_unit
> create test/unit/siyaku_test.rb
> create test/fixtures/siyakus.yml
(ちょっとだけ時間かかる)


# sudo rake db:migrate
# rake aborted!
# uninitialized constant Rake::DSL
# /usr/local/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
# /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in <class:TaskLib>'
# ローカルでやった場合は、なぜか失敗した。Gemfileを編集してgem 'rake', '0.8.7'を1行追記した
# リモートでやった場合は、なぜか失敗しなかった。
失敗した場合というのは、以下の通りGemfileを編集して、もう一度試すとうまくいった。

/opt/kanridb$ sudo vi Gemfile
# 1行追記
gem 'rake', '0.8.7'

gem 'rails', '(バージョン)' の行の1つ下にでも入れておこう。

/opt/kanridb$ sudo bundle update rake

> Using rake (0.8.7)
Your bundle is updated! Use `bundle show [gemname]` to see where a bundled gem is installed.


/opt/kanridb$ sudo rake db:migrate

> -- create_table(:siyakus)
> -> 0.0015s
> == CreateSiyakus: migrated (0.0016s) =========================================

こんな感じのが出てくれば、migrate完了です。




次に、データをsqliteにぶちこんでみる。
/opt/kanridb$ sudo vi test/fixtures/siyakus.yml
(コメント以下を全て編集、変更する)
# Read about fixtures at http://api.rubyonrails.org/classes/Fixtures.html

one:
siyaku: true
si_code: 1
si_name: アルミニウム、粉末

two:
siyaku: true
si_code: 2
si_name: 塩化カリウム

three:
siyaku: true
si_code: 3
si_name: 酒石酸ナトリウムカリウム四水和物

(変更ここまで)

/opt/kanridb$ sudo rake db:fixtures:load FIXTURES=siyakus

なぜか書籍では、FIXTURES=siyakus.yml とした方法が紹介されていたが、試したところrake aborted!というエラーとなってしまった。書籍の問題なのかバージョンの違いによるものなのか不明だが、どうもこの場合、.ymlがいらないっぽい。

無事完了出来たので、試しにSQLiteにデータが入っているのを確認してみた
rails dbconsole
sqlite> .tables
> schema_migrations siyakus

sqlite> .schema siyakus
> CREATE TABLE "siyakus" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "siyaku" boolean,
> "si_code" integer, "si_name" varchar(255), "created_at" datetime, "updated_at" datetime);

sqlite> select * from siyakus;
113629430|t|3|酒石酸ナトリウムカリウム四水和物|2011-09-21 08:21:24|2011-09-21 08:21:24
298486374|t|2|塩化カリウム|2011-09-21 08:21:24|2011-09-21 08:21:24
980190962|t|1|アルミニウム、粉末|2011-09-21 08:21:24|2011-09-21 08:21:24

それぞれテーブル名確認、テーブル構造確認、テーブル内全データ表示となる。
各レコードに、作成日時と変更日時が自動的に登録されているのが見れる。ここでの時刻はUTCのようだ。+9時間すると、日本時間になる。

sqlite> .quit


書籍では、あと2つのクラスを作成する。という内容だった。
書籍で記入されている通りなので割愛。概略としては、このような感じ。

rails generate controller NAME として、コントローラを作成する。(NAME=任意で名前を付ける。半角英数小文字のみ使用)
app/controllers/NAME_controller.rb を編集して2行の間に3行突っ込む
def list
@siyakus = Siyaku.all
end

app/views/NAME/list.html.erbというビューを新規作成してHTMLのtableを作る
<table border="1">
<% @siyakus.each do |siyaku| %>
  <tr>
    <td><%= siyaku.siyaku %<>/td>
    <td><%= siyaku.si_code %<>/td>
    <td><%= siyaku.si_name %<>/td>
  </tr>
<% end %>
</table>
↑ここでタブを使ったらいかん、らしい。必ず、あくまで空白でタグを右にずらす。

ブラウザからデータを見れるよう、1か所設定する
config/routes.rbの最終行から2番目のコメントアウトされた行のコメントを外して設定を活かす

vi config/routes.rb
match ':controller(/:action(/:id(.:format)))'

あとは何かローカルのブラウザを使って表示するだけ。
http://127.0.0.1:3000/NAME/list

sqliteのときのselect * from siyakus;で見られたデータが、ブラウザで見れました。完
関連記事

COMMENT▼

コメントの投稿

管理者にだけ表示を許可する

TRACKBACK▼

http://doctorpeppercheerio.blog.fc2.com/tb.php/50-b9682b9f

この記事にトラックバックする(FC2ブログユーザー)

 | ホーム | 

プロフィール

だーくちぇりー

Author:だーくちぇりー
名前:darkcherry(だーくちぇりー)
特技:器用貧乏
職業:まぜまぜ屋

QRコード

QR

検索フォーム

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。