我有以下3个课程:

class Factory < ActiveRecord::Base
  has_many :machines
end

class Machine < ActiveRecord::Base
  belongs_to :factory, inverse_of: :machines
  has_many :assembly_jobs, inverse_of: :machines
end

class AssemblyJob < ActiveRecord::Base
  belongs_to :machines, inverse_of: :assembly_jobs
end


架构图

Factories
- id

Machines
- factory_id

AssemblyJobs
- machine_id
- start_time
- error_time
- finish_time


我想在factory.rb中编写一个作用域,以返回任何工厂中具有组装作业且具有error_time的计算机。这是否可能,或者我需要在装配工作中添加一个factory_id列并创建一个Emirates_to关联吗?

最佳答案

您可以通过在joins方法中输入自定义联接查询来联接没有关联的表:

Model.joins("<CONDITIONS FOR JOIN>")


但是,根据您的情况,您应该可以使用以下查询将具有装配作业的机器的工厂范围

Factory.joins(machines: :assembly_jobs)


这将创建一个嵌套的INNER JOIN,其中仅返回具有一台或多台机器的工厂的一项或多项装配作业。

10-05 19:24