使用导轨教程中的示例与Physician and Patient,然后使用约会表加入它们。
如果医生有很多问题,那么存储病人独特答案的最佳方法是什么?
可能的解决方案: 患者has_many调查和调查has_many答案。在创建新约会时创建此选项。 问题: 我发现视图和控制器非常复杂,只需要重述我的问题,存储与连接表相关的数据。
答案 0 :(得分:4)
在所有这一切的最底层,在我看来,你有一个答案 - 一个问题,在预约期间,从病人到医生。
class Answer < ActiveRecord::Base
belongs_to :question
belongs_to :appointment
belongs_to :patient
belongs_to :physician
端
所以我们还需要问题,预约,患者,医师模型,这些模型都有很多&#34;解答。
问题可能属于个别医生(虽然我认为很多医生都会问同样的问题)。
创建约会时,您了解医生和患者。编写预约,然后获取医生的问题,并为每个医生的问题创建答案记录(现在您知道所有四个相关实体的ID)。在约会模型中执行此操作,而不是在控制器中执行此操作。查看ActiveRecord :: Callbacks,在这种情况下,after_create可能是你的朋友。
在这种情况下查询变得非常容易,并且记录ID(外键)存储起来相对便宜。
有趣的场景。
答案 1 :(得分:0)
假设医生不分享问题,以下模型描述了您要完成的任务。
模型(非规范化):
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
has_many :questions
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :answers
has_many :physicians, through: :appointments
end
class Questions < ActiveRecord::Base
belongs_to :physician
has_one :answer
end
class Answers < ActiveRecord::Base
belongs_to :question
belongs_to :patient
end
编辑关于查询(并不像您期望的那样困难)
让所有患者都为医生:
Physician.find(1).patients
为医生提出所有问题:
Physician.find(1).questions
获得患者的所有答案:
Patient.find(1).answers