我有三种模式:
系
class Department < ActiveRecord::Base
has_many :patients, :dependent => :destroy
has_many :waitingrooms, :dependent => :destroy
end
等候室包含字段patient_id:integer
和department_id:integer
class Waitingroom < ActiveRecord::Base
belongs_to :patient
end
带有department_id:integer
的患者
class Patient < ActiveRecord::Base
belongs_to :department
has_many :waitingrooms
end
我在病房进入候诊室后救了一间候诊室!所以现在我试图找回那些在该部门候诊室里的病人:
def index
@waited = @current_department.waitingrooms.patients
end
不知怎的,它没有工作,它返回了这个错误:
undefined method `patients' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Waitingroom:0x374c658>
但这有效:我错了什么?谢谢!
def index
@waited = @current_department.waitingrooms
end
答案 0 :(得分:2)
您无法在集合上调用关联。您需要在特定记录上调用它。如果您想让所有患者进入一组候诊室,您需要这样做:
def index
rooms = @current_department.waitingrooms
@waited = rooms.map { |r| r.patients }
end
如果你想要一个平面阵列,你可以(作为一个天真的第一遍)使用rooms.map { |r| r.patients }.flatten.uniq
。一个更好的尝试就是建立一个患者ID列表并一次取出患者:
@waited = Patient.where(id: rooms.pluck(:patient_id).uniq)