Rails Active Record Associations 的问题

joezhang · 发布于 2016年12月16日 · 最后由 flemon1986 回复于 2016年12月23日 · 597 次阅读
10414

class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ApplicationRecord
  belongs_to :physician
  belongs_to :patient
end

class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end

关系如上,医生,病人,预约,很好理解,不过如果想设计Physician和Patient同属于一个表User,应该怎么写呢?难道要用Polymorphic Associations?感觉这样设计有点别扭。请指教。谢谢!

class User < ApplicationRecord
  belongs_to :role, polymorphic: true
end

class Physician < ApplicationRecord
  has_many :users, as: :role
end

class Patient < ApplicationRecord
  has_many :users, as: :role
end
共收到 6 条回复
19106

继承类是你想要的效果么?

# users schema
# type String
class Physician < User
end

继承自User 数据表都存在users上, 会通过type字段分别子类

10414

谢谢 yingce 不知道是统一在一个User 表还是直接分成Physician和Patient两个表好,纠结中。

19106

#2楼 @joezhang 我觉得是看业务吧 如果只是一个身份标示的话在一张表就行 如果涉及到登陆 后台管理关联也不同的话就可以分开两张

0967c2

多态关联好像是有三张表啊,不符合楼主自己提的需求。继承好像也有个问题,就是一个 user 同属于医生和病人不能处理。

10414

@pinewong 综合考虑,最后还是选择三表多态关联,医生和病人属于不同的表。😀

18898

分开是好的,看是很相似的两个或几个模型,不同的表现一旦多了,一表多态继承就很麻烦了 初始最多就两个不同名称的表的结构一样,看似多余,但是无害,方便分别扩展

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册