Next-L Enju 開発ワークショップ #4 「資料の統計」 2012年5月19日 田辺浩介
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)
図書館に必要な統計を考えようその集計に必要なモデルがどれかを選ぶ