在三个表之间连接,这些表不接受Active Record查询中“where”内的条件

时间:2018-01-25 18:24:24

标签: ruby ruby-on-rails-5

我有一个询问,我想知道你是否可以帮助我。 在我的申请中,我有桌子的员工,日历和轮班。以下是关系:

class Employee < ApplicationRecord
   has_many :calendars
   has_many :shifts, :through => :calendars

class Shift < ApplicationRecord
  has_many :calendars
  has_many :employees, :through => :calendars

class Calendar < ApplicationRecord
  belongs_to :employee
  belongs_to :shift

因此,我需要制作一个表格,其中显示以下结果:

Name                |   Calendars.date  |   Calendars.date  | …
Employee.name       |   Shift.cod       |   Shift.cod       | …
Employee.name       |   Shift.cod       |   Shift.cod       | …
…

为此,我构建了查询:

-@employees = Employee.joins(:calendars, :shifts).where("EXTRACT(MONTH FROM calendars.date) = ?", 12).uniq

结果得到了所有必要的数据,但是我需要显示一个月的数据,但是我没有把它放在where中的参数中。

如何构建查询以按月过滤?

1 个答案:

答案 0 :(得分:0)

也许你可以尝试Employee.includes(:calendars, :shifts).where('calandar.month= ?', '<whatever month here>').references(:calendars)

我不确定语法是否正确,但基本上你使用1st_obj.includes(obj).where(case).references(obj)来处理属于另一个对象的对象

这里是docs for active_records .includes方法