2009年7月25日土曜日

[Rails][習作] 簡易ブックマークアプリ (1)

Railsの基本の復習のため、簡単なアプリを作ってみようと思います。全何回になるかは風の向くままに。

作りたいもの: Webブックマークアプリ
※ブックマークは日付とタグで管理します。

とりあえず、最低限の機能として
  • ブックマーク作成/編集
  • ブックマークした日付での絞り込み検索
  • 複数のタグでの絞り込み検索
を考えます。

画面や細かい点は作りながら詰めるとして、ではいってみよー。

アプリ作成


$ rails bookmark


モデル(ActiveRecored)作成

2つのモデル(ブックマーク、タグ)が必要です。

+----------------+ 1 1..* +---------------+
| Bookmark |-----------| Tag |
|----------------| |---------------|
| url:string | | tag:string |
| comment:string | +---------------+
+----------------+
BookmarkとTagは、本来は多対多の関係ですが、簡単のため1対多とします。不都合が出てきたら変えるかも。

Bookmark は編集画面が欲しいので scaffold で。Tag はモデルだけ作ります。


$ script/generate scaffold bookmark url:string comment:string
$ script/generate model tag tag:string



テーブル作成。


$ rake db:migrate



できた雛形を編集して関連を追加。

# model/bookmark.rb
class Bookmark < ActiveRecord::Base
has_many :tags, :dependent=>:destroy
end


# model/tag.rb
class Tag < ActiveRecord::Base
belongs_to :bookmark
end


tagテーブルに外部キーをつけるのを忘れていたので、migrationを追加。


$ script/generate migration AddBookmarkIdToTag bookmark_id:integer
$ rake db:migrate



これでモデルができました。
コンソールから操作してみます。


$ script/console
>> bookmark = Bookmark.create(:url=>"http://rubyonrails.org/", :comment=>"Ruby on Rails official site")
=> #<Bookmark id: 2, url: "http://rubyonrails.org/", comment: "Ruby on Rails official site", created_at: "2009-07-25 07:34:37", updated_at: "2009-07-25 07:34:37">
>> Bookmark.find(:all)
=> [#<Bookmark id: 2, url: "http://rubyonrails.org/", comment: "Ruby on Rails official site", created_at: "2009-07-25 07:34:37", updated_at: "2009-07-25 07:34:37">]
>> bookmark.tags << Tag.create(:tag=>"Ruby")
=> [#<Tag id: 2, tag: "Ruby", created_at: "2009-07-25 07:35:26", updated_at: "2009-07-25 07:35:26", bookmark_id: 2>]>> bookmark.tags << Tag.create(:tag=>"Rails")
=> [#<Tag id: 2, tag: "Ruby", created_at: "2009-07-25 07:35:26", updated_at: "2009-07-25 07:35:26", bookmark_id: 2>, #<Tag id: 3, tag: "Rails", created_at: "2009-07-25 07:35:44", updated_at: "2009-07-25 07:35:44", bookmark_id: 2>]
>> Tag.find(:all)
=> [#<Tag id: 2, tag: "Ruby", created_at: "2009-07-25 07:35:26", updated_at: "2009-07-25 07:35:26", bookmark_id: 2>, #<Tag id: 3, tag: "Rails", created_at: "2009-07-25 07:35:44", updated_at: "2009-07-25 07:35:44", bookmark_id: 2>]
>> bookmark.tags.size
=> 2
>> bookmark.tags
=> [#<Tag id: 2, tag: "Ruby", created_at: "2009-07-25 07:35:26", updated_at: "2009-07-25 07:35:26", bookmark_id: 2>, #<Tag id: 3, tag: "Rails", created_at: "2009-07-25 07:35:44", updated_at: "2009-07-25 07:35:44", bookmark_id: 2>]


(id が2から始まっているのはお察しください)

テストデータ作成

fixtureデータを作成します。


# test/fixtures/bookmarks.yml
ruby:
id: 1
url: "http://www.ruby-lang.org/ja/"
comment: "Ruby official site"
created_at: "2009-06-01 09:00:00"
updated_at: "2009-06-01 09:00:00"

rubiest:
id: 2
url: "http://jp.rubyist.net/"
comment: "日本Rubyの会"
created_at: "2009-06-01 09:00:00"
updated_at: "2009-06-01 09:00:00"

rails:
id: 3
url: "http://rubyonrails.org"
comment: "Ruby on Rails official site"
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

rubylife:
id: 4
url: "http://www.rubylife.jp/ini/"
comment: "Ruby入門"
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

railswiki:
id: 5
url: "http://wiki.fdiary.net/rails/"
comment: "Rails Wiki"
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"


# test/fixtures/tags.yml
ruby_1:
id: 1
tag: "Ruby"
bookmark_id: 1
created_at: "2009-06-01 09:00:00"
updated_at: "2009-06-01 09:00:00"

rubiest_1:
id: 2
tag: "Ruby"
bookmark_id: 2
created_at: "2009-06-01 09:00:00"
updated_at: "2009-06-01 09:00:00"

rails_1:
id: 3
tag: "Ruby"
bookmark_id: 3
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

rails_2:
id: 4
tag: "RubyOnRails"
bookmark_id: 3
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

rubylife_1:
id: 5
tag: "Ruby"
bookmark_id: 4
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

railswiki_1:
id: 6
tag: "Ruby"
bookmark_id: 5
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"

railswiki_2:
id: 7
tag: "RubyOnRails"
bookmark_id: 5
created_at: "2009-07-01 09:00:00"
updated_at: "2009-07-01 09:00:00"


(作成日付を使いたいので、 created_at と updated_at も変更しておきます。)

さっき作成したBookmarkエントリを削除して


$ script/dbconsole
sqlite> delete from bookmarks;
sqlite> delete from tags;


fixtureデータを投入します。


$ rake db:fixtures:load


dbconsoleから確認。


sqlite> select * from bookmarks;
1|http://www.ruby-lang.org/ja/|Ruby official site|2009-06-01 09:00:00|2009-06-01 09:00:00
2|http://jp.rubyist.net/|日本Rubyの会|2009-06-01 09:00:00|2009-06-01 09:00:00
3|http://rubyonrails.org|Ruby on Rails official site|2009-07-01 09:00:00|2009-07-01 09:00:00
4|http://www.rubylife.jp/ini/|Ruby入門|2009-07-01 09:00:00|2009-07-01 09:00:00
5|http://wiki.fdiary.net/rails/|Rails Wiki|2009-07-01 09:00:00|2009-07-01 09:00:00
sqlite> select * from tags;
1|Ruby|2009-06-01 09:00:00|2009-06-01 09:00:00|1
2|Ruby|2009-06-01 09:00:00|2009-06-01 09:00:00|2
3|Ruby|2009-07-01 09:00:00|2009-07-01 09:00:00|3
4|RubyOnRails|2009-07-01 09:00:00|2009-07-01 09:00:00|3
5|Ruby|2009-07-01 09:00:00|2009-07-01 09:00:00|4
6|Ruby|2009-07-01 09:00:00|2009-07-01 09:00:00|5
7|RubyOnRails|2009-07-01 09:00:00|2009-07-01 09:00:00|5



テストデータが投入されました。

Webサーバを起動して http://localhost:3000/bookmarks を開いたところ。


以上でアプリの雛形が出来上がりました。
あとは、このscaffoldをカスタマイズしていきます。

------
[Rails][習作] 簡易ブックマークアプリ (2) >>

0 件のコメント:

コメントを投稿