我无法找到解决方案。 我有一个名为Users的模型,它与模型SalaryReport有一个has_many关联。用户必须每月报告一次他们的工资,如果没有,则发送提醒。我的问题是找到没有报告工资的用户。我无法找到最佳方法。
我尝试了一些不同的方法但没有任何有效的方法。有没有人有任何想法?
提前感谢您的帮助!
答案 0 :(得分:0)
在您的用户模型中
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
值进行比较
答案 1 :(得分:0)
查找在分隔日期之前拥有最后一份报告工资报告的用户:
Users.select('users.*, max(salary_reports.report_date) report_date').joins(:salary_reports).group(:id).having('max(salary_report.report_date)<?',limiting_date)