Next-L Enju 開発ワークショップ #4

Preview:

Citation preview

Next-L Enju 開発ワークショップ #4「資料の統計」

2012年5月19日田辺浩介

前回からの主な進捗

Next-L Enju Leaf 1.0.5.rc3リリースWindows上で動くことを確認

RailsInstallerを使用手間はLinux/Macとあまり変わらない気がする

図書館の統計情報の取得

図書館に必要な統計

貸出回数資料ごと利用者ごと

予約回数資料ごと利用者ごと

図書館に必要な統計

蔵書数館ごと資料区分ごと除籍冊数

利用者数登録者数

図書館に必要な統計

ほかにもなにが必要か考えてみよう!

統計に関係するモデル

書誌 (Manifestation), 所蔵 (Item)

利用者 (User)

貸出 (Checkout), 予約 (Reserve)

図書館 (Library), 書架 (Shelf)

件名 (Subject)

ほかにもあるかも?

決めること

統計に必要なデータの管理はどのモデルの役割かたとえば、「館ごとの蔵書数」

所蔵情報 (Item)

図書館 (Library)

書棚 (Shelf)所蔵は書棚に属し、書棚は図書館に属するため

組み立て戦略

必要なモデルを選ぶ選んだモデル間の関連を追う集計に必要な属性がどのモデルに存在するかを把握する

モデル間の関連

モデル間の関連

1対1

belongs_to / has_one

1対多belongs_to / has_many

has_one through

多対多has_many through

1対1

貸出1件に対する返却は1件返却1件に対する貸出は1件

以下のファイルを見てみようapp/models/checkout.rb

app/models/checkin.rb

1対1

貸出1件に対する返却は1件返却1件に対する貸出は1件

以下のファイルを見てみようapp/models/checkout.rb

app/models/checkin.rb

1対多(1)

1件の所蔵に対する貸出は複数存在1件の貸出に対する所蔵は1件

以下のファイルを見てみようapp/models/item.rb

app/models/checkout.rb

1対多(2)

1人の利用者に対する権限は1件1件の権限に対する利用者は複数

以下のファイルを見てみようapp/models/user.rb

app/models/user_has_role.rb

app/models/role.rb

多対多

1件の書誌に対する出版者は複数存在1人の出版者に対する書誌は複数存在

以下のファイルを見てみようapp/models/patron.rb

app/models/produce.rb

app/models/manifestation.rb

Railsでの関係の定義

モデルとモデルの所属関係を決める所属される側のモデルに以下のカラムを追加所属するモデルのモデル名を

”単数形にし、さらに末尾に _id”をつけるデータ型はinteger

関連の定義例(1)

BlogモデルとPostモデルが存在各モデルは以下のように作成されている

$ rails g scaffold Blog title:string

$ rails g scaffold Post body:text

$ rake db:migrate を忘れないこと

関連の定義例(2)

BlogモデルとPostモデルが存在ひとつのBlogには複数のPostが存在

Blog has_many Posts

Post belongs_to Blog

関連の定義例(3)

app/models/blog.rbに以下を追加has_many :posts

app/models/post.rbに以下を追加belongs_to :blog

関連の定義例(4)

Postモデルにblog_idカラムを追加rails g migration AddBlogIdToPost blog_id:integer

関連の定義例(5)

データを用意するrails c

>> blog = Blog.create(:title => '田辺のブログ')>> post = Post.create(:body => 'Enju開発ワークショップに行ったよ')

関連の定義例(6)

関連を確認し設定する>> blog.posts # blogにひも付いているpostを取得

=> []>> blog.posts << post # postを追加=> [#<Post id: 1, body: "Enju開発ワークショップに行ってきた", created_at: "2012-05-18 18:28:18", updated_at: "2012-05-18 18:29:35", blog_id: 1>]>> blog.posts # もう一度取得してみる

Blogから見たPostは複数あるため、“メソッドが blog.posts”と複数形になってい

関連の定義例(7)

関連づけを逆方向から確認する>> post.blog

=> #<Blog id: 1, title: "田辺のブログ", created_at: "2012-05-18 18:28:04", updated_at: "2012-05-18 18:28:04">

Postから見たBlogはひとつのため、“メソッドが post.blog”と単数形になっている

実習(1)

以下のように作成されたUserモデルがあります$ rails g model User email:string

ひとりのUserはひとつだけBlogを作れるとしますどのように関連を設定すればよいでしょうか

実習(2)

各自で図書館に必要な統計を考えてくださいその集計に必要なモデルを選び、関連を調べてください関連をもとに、クエリを設定してください

実習(2)

図書館に必要な統計を考えようその集計に必要なモデルがどれかを選ぶ

Recommended