我很难找到解决方案。我有一个名为 Users 的模型,它与模型 SalaryReport 具有 has_many 关联。用户必须每月报告一次他们的工资,否则将发出提醒。我的问题是找到尚未报告工资的用户。我想不出最好的方法来做到这一点。
我尝试了几种不同的方法,但还没有奏效。有没有人有任何想法?
在此先感谢您的帮助!
我很难找到解决方案。我有一个名为 Users 的模型,它与模型 SalaryReport 具有 has_many 关联。用户必须每月报告一次他们的工资,否则将发出提醒。我的问题是找到尚未报告工资的用户。我想不出最好的方法来做到这一点。
我尝试了几种不同的方法,但还没有奏效。有没有人有任何想法?
在此先感谢您的帮助!
在您的用户模型中,
def self.no_salary_report
User.all.select {|u| u.salary_reports.empty? }
end
称呼它,User.no_salary_report
这将使您获得所有没有任何salary_reports
. 我不完全知道你的型号名称,所以这是我能做的最好的。
编辑 1:对于您另外询问的时间范围
def self.no_salary_reports_between(start_date, end_date)
User.all.select do |u|
u.salary_reports.select do |s|
(start_date < s.created_at) && (end_date > s.created_at)
end.empty?
end
end
请注意,start_date
您end_date
为此方法提供的参数必须是DateTime
对象才能正常工作,将值与 的created_at
值进行比较salary_reports
。
查找在定界日期之前拥有最后一个报表工资报告的用户:
Users.select('users.*, max(salary_reports.report_date) report_date').joins(:salary_reports).group(:id).having('max(salary_report.report_date)<?',limiting_date)