2018-07-31-关联

2018-07-31  本文已影响0人  护念

其实rails关联类型之间都有许多联系和推演,从这个角度去看,比较容易理解

has_many VS has_one

Snip20180731_1.png

has_many through VS has_and_belongs_to_many

Snip20180731_2.png

多态关联

Snip20180803_1.png

1、一个model 同时属于多个其它model
2、表中 通过xx_id、xx_type 区分 它存的是哪个model的信息(xx_type中是model名)

class Picture < ApplicationRecord
  belongs_to :imageable,:polymorphic => true
end

class Product < ApplicationRecord
  has_many :pictures
end

class Person < ApplicationRecord
  has_many :pictures
end

单表继承

Snip20180803_2.png

1、它们是model间继承
2、由于这几个model数据相似性,非常高,所以用一张表来搞定
3、表中用type(存model名) 来区分哪个model的数据

class Vehicle < ApplicationRecord
end

class Car < Vehicle
end

class Motorcycle < Vehicle
end

PS:命令写法rails g model car --parent=Vehicle

自联结

所谓自关联即:自己和自己关联。

主要是通过 class_name、foreign_key 来设定关联行为

class Person < ApplicationRecord
  has_many :subordinates, :class_name => 'Person',:foregin_key => 'manager_id'
  belongs_to :manager,:class_name => 'Person'
  # class_name 类名大写
  # 外键能通过 方法名 推导出来就不用写
end
上一篇下一篇

猜你喜欢

热点阅读