0

我很难找到解决方案。我有一个名为 Users 的模型,它与模型 SalaryReport 具有 has_many 关联。用户必须每月报告一次他们的工资,否则将发出提醒。我的问题是找到尚未报告工资的用户。我想不出最好的方法来做到这一点。

我尝试了几种不同的方法,但还没有奏效。有没有人有任何想法?

在此先感谢您的帮助!

4

2 回答 2

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_dateend_date为此方法提供的参数必须是DateTime对象才能正常工作,将值与 的created_at值进行比较salary_reports

于 2013-08-11T19:01:46.713 回答
0

查找在定界日期之前拥有最后一个报表工资报告的用户:

Users.select('users.*, max(salary_reports.report_date) report_date').joins(:salary_reports).group(:id).having('max(salary_report.report_date)<?',limiting_date)
于 2013-08-11T19:02:31.710 回答