协会不工作

时间:2013-11-19 20:35:14

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我有三种模式:

class Department < ActiveRecord::Base
    has_many :patients, :dependent => :destroy
    has_many :waitingrooms, :dependent => :destroy
end

等候室包含字段patient_id:integerdepartment_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

1 个答案:

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