我在Rail 3.2 ruby 2.1.5应用程序中有2个模型,即User和Absence,
class User
has_many :absences
end
class Absence
belongs_to :user
end
缺席时有:start_date和:end_date
我需要以最有效的方式弄清楚以下内容
"今天有多少用户缺席?"
因此,这将是所有缺席的选择中的不同用户ID的计数,其中开始日期是今天或今天之前,结束日期是今天或今天之后。
我想过做像
这样的事情user_ids = Absence.where("absences.start_date <= ? and absences.end_date >= ?", Date.today, Date.today).map(&:user_id)
user_ids.uniq!
user_ids.count
那&#34;思考&#34;这让我得到了我需要的ID,但这是进行此查询的最有效方法吗?
答案 0 :(得分:1)
试试这个:
absent_users = User.includes(:absences).where("absences.start_date <= ? and absences.end_date >= ?", Date.today, Date.today)
或者更简洁:
current_date = Date.today
absent_users = User.includes(:absences).where("absences.start_date <= ? and absences.end_date >= ?", current_date, current_date)
如果您仍然没有获得明显的结果,那么它应该为您提供明确的用户结果,然后在活动记录链中添加distinct
。
您是否只关注独特的user_id
记录?然后,您只需在user_id
列的查询中添加select
:
absent_user_ids = Absence.select(:user_id).where("absences.start_date <= ? and absences.end_date >= ?", Date.today, Date.today).distinct
答案 1 :(得分:0)
我认为你应该使用:
Absence.where("absences.start_date <= ? and absences.end_date >= ?", Date.today, Date.today).group("user_id").length