24
BP Study #15 ORマッパー対決2008 Active Recordとか

20081128 Bp Study#15 Active Record

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 20081128 Bp Study#15 Active Record

BP Study #15

ORマッパー対決〜2008

Active Recordとか

Page 2: 20081128 Bp Study#15 Active Record

自己紹介

• 尾崎 智仁

• ID:yuroyoro

• フリーエンジニア

• Java、最近はScala

Page 3: 20081128 Bp Study#15 Active Record

Blog

Page 4: 20081128 Bp Study#15 Active Record

ORマッパー対決

ってことで

Page 5: 20081128 Bp Study#15 Active Record
Page 6: 20081128 Bp Study#15 Active Record
Page 7: 20081128 Bp Study#15 Active Record
Page 8: 20081128 Bp Study#15 Active Record

Active Record

Page 9: 20081128 Bp Study#15 Active Record

ActiveRecordって?

•RailsでのO/R Mapper

•Railsなくてもつかえるけど

•ActiveRecordパターン

•Mapping定義が簡単

•class Member < ActiveRecord::Base

Page 10: 20081128 Bp Study#15 Active Record

ActiveRecordって?

•DDL関係はMigrationで

•Act_as_*で振る舞いを拡張可能

•動的ファインダ

•Lazy Loading

•Named Scope ->イカス

Page 11: 20081128 Bp Study#15 Active Record

やってみよう!

Page 12: 20081128 Bp Study#15 Active Record

ActiveRecordを使う準備

•MySqlをインストールしておく

•MySqlにDatabaseを作っておく

•Railsアプリを生成する

•Migration書く

Page 13: 20081128 Bp Study#15 Active Record

Railアプリを生成$ rails ARTestrails ARTestrails ARTestrails ARTest

create

create app/controllers

create app/helpers

create app/models

create app/views/layouts

create config/environments

create config/initializers

create db

create doc

ActiveRecordを使う - 1

Page 14: 20081128 Bp Study#15 Active Record

Modelを生成する

$ ./script/generate model ./script/generate model ./script/generate model ./script/generate model member username:string password:string¥ sex:decimal birthday:datetime last_login_time:timestamp

:0:Warning: Gem::SourceIndex#search support for Regexp patterns is deprecated

exists app/models/

exists test/unit/

exists test/fixtures/

create app/models/member.rb

create test/unit/member_test.rb

create test/fixtures/members.yml

create db/migrate

create db/migrate/20081127123415_create_members.rb

ActiveRecordを使う - 2

Page 15: 20081128 Bp Study#15 Active Record

Migrateする

$ rake db:migraterake db:migraterake db:migraterake db:migrate

(in /Users/ozaki/dev/Project/sandbox/work/ARTest)

== 20081127123415 CreateMembers: migrating ====================================

-- create_table(:members)

-> 0.0049s

== 20081127123415 CreateMembers: migrated (0.0054s) ===========================

ActiveRecordを使う - 3

Page 16: 20081128 Bp Study#15 Active Record

Consoleで確認$ script/console

Loading development environment (Rails 2.1.0)

>> member=Member.find(:all)>> member=Member.find(:all)>> member=Member.find(:all)>> member=Member.find(:all)

=> []

>> Member.create>> Member.create>> Member.create>> Member.create

#<Member id: 1, username: nil, password: nil, first_name: nil, last_name: nil, sex: nil, birthday: nil, last_login_time: nil, created_at: "2008-11-27 13:16:47", updated_at: "2008-11-27 13:16:47">

>> Member.find(1)>> Member.find(1)>> Member.find(1)>> Member.find(1)

=> #<Member id: 1, username: nil, password: nil, first_name: nil, last_name: nil, sex: nil, birthday: nil, last_login_time: nil, created_at: "2008-11-27 13:16:47", updated_at: "2008-11-27 13:16:47”>

ActiveRecordを使う - 4

Page 17: 20081128 Bp Study#15 Active Record

動的な属性ベースのファインダ

>> Member.find_by_username('Test2')Member.find_by_username('Test2')Member.find_by_username('Test2')Member.find_by_username('Test2')

=> #<Member id: 2, username: "Test2", password: nil, first_name:nil, last_name: nil, sex: nil, birthday: nil, last_login_time: nil, created_at: "2008-11-27 13:17:04", updated_at: "2008-11-27 13:21:14">

ActiveRecordを使う - 5

Page 18: 20081128 Bp Study#15 Active Record

関連の設定class Employee< ActiveRecord::Base

belongs_to :department

has_many :roles ,:through => :belongs

End

class Department< ActiveRecord::Base

has_many :employees

acts_as_tree :order => "id"

end

ActiveRecordを使う - 6

Page 19: 20081128 Bp Study#15 Active Record

Named_scopeclass Member < ActiveRecord::Base

named_scope :male,

:conditions=>["sex = ?",1]

named_scope :recent,

lambda {|*args| {:conditions => ["updated_at > ?", args.first || 1.day.ago]} }

end

ActiveRecordを使う - 7

Page 20: 20081128 Bp Study#15 Active Record

ActiveRecord まとめ

•Mapping定義は楽

•Pluginいっぱい

•Lazy Loading

•Irb上で簡単確認

よかったさがしよかったさがしよかったさがしよかったさがし

Page 21: 20081128 Bp Study#15 Active Record

ActiveRecord まとめ

•リファクタリング大変

•Migrationは計画的に

•IDEの補完が…

•Joinとかにがて

DisDisDisDisってみるってみるってみるってみる

Page 22: 20081128 Bp Study#15 Active Record

おまけActive Objects

Page 23: 20081128 Bp Study#15 Active Record

ActiveObjectsって?

•ARパターンのJava実装

•Interfaceにgetter/setterで

•manager.migrate(Person.class);

•EntityManager

•アノテーション

•http://d.hatena.ne.jp/nattou_curry_2/

Page 24: 20081128 Bp Study#15 Active Record

ご清聴ありがとう

ございました