Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails在特定条件下查找具有关联的所有记录_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails在特定条件下查找具有关联的所有记录

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

我很难找到解决这个问题的办法。 我有一个名为Users的模型,它与模型SalaryReport有很多关联。用户必须每月报告一次他们的工资,如果没有,则发送提醒。我的问题是查找尚未报告其薪资的用户。我想不出最好的办法

我尝试了几种不同的方法,但都没有奏效。有人有什么想法吗

提前感谢您的帮助

在您的用户模型中

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,很好的范围调用。是的,这将是一个很好的例子,您也可以使用范围。