Ruby on rails Rails在特定条件下查找具有关联的所有记录
我很难找到解决这个问题的办法。 我有一个名为Users的模型,它与模型SalaryReport有很多关联。用户必须每月报告一次他们的工资,如果没有,则发送提醒。我的问题是查找尚未报告其薪资的用户。我想不出最好的办法 我尝试了几种不同的方法,但都没有奏效。有人有什么想法吗 提前感谢您的帮助 在您的用户模型中Ruby on rails Rails在特定条件下查找具有关联的所有记录,ruby-on-rails,Ruby On Rails,我很难找到解决这个问题的办法。 我有一个名为Users的模型,它与模型SalaryReport有很多关联。用户必须每月报告一次他们的工资,如果没有,则发送提醒。我的问题是查找尚未报告其薪资的用户。我想不出最好的办法 我尝试了几种不同的方法,但都没有奏效。有人有什么想法吗 提前感谢您的帮助 在您的用户模型中 def self.no_salary_报告 User.all.select{| u | u.salary_reports.empty?} 结束 称之为,User.no\u salary\u
def self.no_salary_报告
User.all.select{| u | u.salary_reports.empty?}
结束
称之为,User.no\u salary\u report
这将使您获得所有没有任何薪资报告的用户。我不知道你们的型号,所以这是我能做的最好的了
编辑1:对于您另外要求的时间范围
def self.no_salary_reports_之间(开始日期、结束日期)
User.all.select do|u|
u、 薪资报告。选择应做的事|
(开始日期s.created\u at)
结束,空的?
结束
结束
请注意,您为该方法提供的start\u date
和end\u date
参数必须是DateTime
对象,才能正确地将该值与salary\u报告的值进行比较查找在定界日期之前具有上一个reportet salary report的用户:
Users.select('users.*, max(salary_reports.report_date) report_date').joins(:salary_reports).group(:id).having('max(salary_report.report_date)<?',limiting_date)
Users.select('Users.*,max(salary_reports.report_date)report_date')。join(:salary_reports)。group(:id)。have('max(salary_report.report_date)你能发布你试图给出更准确答案的几种方法吗?查看编辑后的答案非常感谢你的帮助!我会测试一下!作为一个范围,这不是更好吗?嗨,是的,这很有效!是否有可能在其中获得一个日期范围,以便我可以找到缺少的时段?例如,如果用户发送了2月份而不是1月份的报告yMatt,很好的范围调用。是的,这将是一个很好的例子,您也可以使用范围。