Pangolin
Pangolin

Reputation: 7444

Rails How to use join in this specific situation?

I have three models, each connected as such: Groups which has many Students which has many Absences.

Absences has a field called created_on.

I only have a group id and would like to obtain all students with an absence of today.

I have created this method inside my Student model:

# Inside student.rb

def self.absent_today_in_group (group)
 #SQLITE
 find(:all, :joins => :absences, :conditions => ["STRFTIME('%d', created_on) = ? AND STRFTIME('%m', created_on) = ?", Date.today.day, Date.today.month])

 #POSTGRES
 #find(:all, :joins => :absences, :conditions => ["EXTRACT(DAY FROM created_on) = ? AND EXTRACT(MONTH FROM created_on) = ?", Date.today.day, Date.today.month])
end

Why would that query not return anything? And how could I then also check for group_id?

Upvotes: 0

Views: 71

Answers (2)

Milovan Zogovic
Milovan Zogovic

Reputation: 1580

What version of rails are you using? You can do this in rails 3:

def self.absent_today_in_group(group)
  joins(:absences, :group).where(
    'absences.created_on' => (Time.now.beginning_of_day..Time.now.end_of_day),
    'groups.id' => group.id
  )
end

That would find all users which were absent for today for given group.

Upvotes: 3

Atastor
Atastor

Reputation: 741

Shouldnt this be :where and not :conditions?

Upvotes: 0

Related Questions