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

时间:2013-08-11 18:55:53

标签: ruby-on-rails

我无法找到解决方案。 我有一个名为Users的模型,它与模型SalaryReport有一个has_many关联。用户必须每月报告一次他们的工资,如果没有,则发送提醒。我的问题是找到没有报告工资的用户。我无法找到最佳方法。

我尝试了一些不同的方法但没有任何有效的方法。有没有人有任何想法?

提前感谢您的帮助!

2 个答案:

答案 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_dateend_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)