如何存储与其中一个连接表相关的直通表的数据

时间:2015-01-02 20:31:59

标签: ruby-on-rails

使用导轨教程中的示例与Physician and Patient,然后使用约会表加入它们。

如果医生有很多问题,那么存储病人独特答案的最佳方法是什么?

可能的解决方案: 患者has_many调查和调查has_many答案。在创建新约会时创建此选项。 问题: 我发现视图和控制器非常复杂,只需要重述我的问题,存储与连接表相关的数据。

2 个答案:

答案 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