Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Rails 开发入门课程] 第三节 ActiveRecord Association

David Zhang
December 25, 2012

[Rails 开发入门课程] 第三节 ActiveRecord Association

这节主要介绍 Rails Model 之间的关系,比如 一对一,一对多和多对多。

David Zhang

December 25, 2012
Tweet

More Decks by David Zhang

Other Decks in Programming

Transcript

  1. RAILS 开发⼊入⻔门课程 RAILS 运⾏行环境 Model Routes 第⼀一节 第⼆二节 第四节 Controllers

    & Views 第五节 ActiveRecord Association 第六节 Form API 第三节 12年12月27⽇日星期四
  2. 内容回顾 浏览器 Web Server App Server DB Rails API HTTP

    请求处理流程 12年12月27⽇日星期四
  3. TOPIC id subject content 1 欢迎投票 2012 年度最受欢迎的中 国开源项⺫⽬目 2

    现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics 12年12月27⽇日星期四
  4. id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目 2 现已⽀支持上传图⽚片

    图⽚片存储在⼜又拍云 topics id nickname email 1 daqing [email protected] 2 matz [email protected] users 12年12月27⽇日星期四
  5. id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目 2 现已⽀支持上传图⽚片

    图⽚片存储在⼜又拍云 topics id nickname email 1 daqing [email protected] 2 matz [email protected] users 如何建⽴立关系? 12年12月27⽇日星期四
  6. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id nickname email 1 daqing [email protected] 2 matz [email protected] users 12年12月27⽇日星期四
  7. FOREIGN KEY topics id nickname email 1 daqing [email protected] 2

    matz [email protected] users id user_id content subject 1 1 2012 年度最受欢迎 的中国开源项⺫⽬目 欢迎投票 2 2 图⽚片存储在⼜又拍云 现已⽀支持上传图⽚片 12年12月27⽇日星期四
  8. FOREIGN KEY topics id nickname email 1 daqing [email protected] 2

    matz [email protected] users id user_id content subject 1 1 2012 年度最受欢迎 的中国开源项⺫⽬目 欢迎投票 2 2 图⽚片存储在⼜又拍云 现已⽀支持上传图⽚片 12年12月27⽇日星期四
  9. FOREIGN KEY topics id nickname email 1 daqing [email protected] 2

    matz [email protected] users id user_id content subject 1 1 2012 年度最受欢迎 的中国开源项⺫⽬目 欢迎投票 2 2 图⽚片存储在⼜又拍云 现已⽀支持上传图⽚片 12年12月27⽇日星期四
  10. FOREIGN KEY topics id nickname email 1 daqing [email protected] 2

    matz [email protected] users id user_id content subject 1 1 2012 年度最受欢迎 的中国开源项⺫⽬目 欢迎投票 2 2 图⽚片存储在⼜又拍云 现已⽀支持上传图⽚片 12年12月27⽇日星期四
  11. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id nickname email 1 daqing [email protected] 2 matz [email protected] users 12年12月27⽇日星期四
  12. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id topic_id email nickname 1 1 daqing1986@gmail .com daqing 2 2 [email protected] matz users 12年12月27⽇日星期四
  13. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id topic_id email nickname 1 1 daqing1986@gmail .com daqing 2 2 [email protected] matz users 12年12月27⽇日星期四
  14. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id topic_id email nickname 1 1 daqing1986@gmail .com daqing 2 2 [email protected] matz users 12年12月27⽇日星期四
  15. FOREIGN KEY id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目

    2 现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 topics id topic_id email nickname 1 1 daqing1986@gmail .com daqing 2 2 [email protected] matz users 12年12月27⽇日星期四
  16. ASSOCIATIONS 1:1 1:M M:M A B A B B B

    B B B A A A one to one one to many many to many 12年12月27⽇日星期四
  17. ASSOCIATIONS 1:1 1:M M:M A B A B B B

    B B B A A A one to one one to many many to many 12年12月27⽇日星期四
  18. 1:M id subject content 1 欢迎投票 2012 年度最受欢迎的中 国开源项⺫⽬目 2

    现已⽀支持上传图⽚片 图⽚片存储在⼜又拍云 id topic_id content 1 1 已投 2 1 ⽀支持 3 2 这个功能不错 4 1 果断投票⽀支持 topics comments 12年12月27⽇日星期四
  19. class Topic < ActiveRecord::Base end class Comment < ActiveRecord::Base end

    has_many :comments :topic belongs_to 12年12月27⽇日星期四
  20. ASSOCIATIONS 1:1 1:M M:M A B A B B B

    B B B A A A one to one one to many many to many 12年12月27⽇日星期四
  21. 1:1 id user_id weibo blog location phone qq 1 1

    http:// weibo.com/ 1680956662 http:// rabelapp.com/ member/ daqing 北京 18612530152 420771712 2 1 http:// twitter.com/ yukihiro_matz http:// www.rubyist.n et/~matz/ 美国 3 9 ~ ~ ~ ~ ~ 4 87 ~ ~ ~ ~ ~ account id nickname email 1 daqing [email protected] 2 matz [email protected] users 12年12月27⽇日星期四
  22. class User < ActiveRecord::Base end class Account < ActiveRecord::Base end

    has_one :account :user belongs_to 12年12月27⽇日星期四
  23. ASSOCIATIONS 1:1 1:M M:M A B A B B B

    B B B A A A one to one one to many many to many 12年12月27⽇日星期四
  24. id subject content 1 欢迎投票 2012 年度最受欢迎的中国开 源项⺫⽬目 2 现已⽀支持上传图⽚片

    图⽚片存储在⼜又拍云 topics id nickname email 1 daqing [email protected] 2 matz [email protected] users id user_id topic_id 1 1 1 2 1 2 3 2 2 bookmark_mapping 12年12月27⽇日星期四
  25. class User < ActiveRecord::Base end class Topic < ActiveRecord::Base end

    has_many :bookmark_mappings :user belongs_to class BookmarkMapping < ActiveRecord::Base end belongs_to has_many :topics, :through => :bookmark_mappings :topic has_many :bookmark_mappings has_many :users, :through => :bookmark_mappings 12年12月27⽇日星期四
  26. ASSOCIATIONS 1:1 1:M M:M A B A B B B

    B B B A A A one to one one to many many to many ✓ ✓ ✓ 12年12月27⽇日星期四
  27. ALL METHODS 1 has_one 2 has_one :through 3 has_many has_many

    :through 4 has_and_belongs_to_many 5 belongs_to 6 12年12月27⽇日星期四
  28. COMMON METHODS 1 has_one 2 has_one :through 3 has_many has_many

    :through 4 has_and_belongs_to_many 5 belongs_to 6 12年12月27⽇日星期四
  29. Movie c c c Book c c c 重复 ?

    12年12月27⽇日星期四
  30. POLYMORPHIC ASSOCIATION id name 1900 牯岭街少年 杀⼈人事件 id commentable_type commentable_id

    content 1 Movie 1900 经典电影,强烈推荐 2 Book 501 看不懂存在主义 id name 501 局外⼈人 movies books comments 12年12月27⽇日星期四
  31. class Movie < ActiveRecord::Base end class < ActiveRecord::Base end has_many

    :comments, :as => :commentable class Book < ActiveRecord::Base end has_many :comments, :as => :commentable belongs_to :commentable, :polymorphic => true Comment 12年12月27⽇日星期四