使用ActiveRecord连接不相关的模型

时间:2016-04-12 03:02:32

标签: ruby-on-rails

我的设置:

class Event
  belongs_to :task
end        

class Task
  has_many :document_tasks
end

class DocumentTask
 belongs_to :document, polymorphic: true
 belongs_to :task
end  

我想这样做:

Event.joins(:task).joins(:document_tasks).where("document_tasks.document_type = ? AND document_tasks.document_id = ?", 'Contact', 1) }

但这会产生以下错误:

  

找不到名为'document_tasks'的关联   FullcalendarEngine ::活动;也许你拼错了?

这样可行:

task_ids = Event.all.collect {|event| event.task.id }.compact      
document_tasks = DocumentTask.where(task_id: task_ids, document_type: 'Contact', document_id: 1) 
event_tasks = Task.where(id: document_tasks.pluck(:task_id)
events = event_tasks.map(&:events).flatten     

但显然它很长,我不能很好地放入范围。是否有一种干净的方式来实现我想要的目标?

0 个答案:

没有答案