Cody Barr
Cody Barr

Reputation: 631

Rails ActiveRecord Query Date Range

I'm trying to use the following line in my controller to capture all tasks due less than a week from the current date:

@due_this_week = current_user.tasks.where(due_date: Date.today..1.week.from_now)

For some reason it's not finding any results even I know I have tasks due within four and six days. This is the only instance variable using a range query. I have another one that works fine to find overdue tasks:

@overdue = current_user.tasks.where("due_date <= ?", Date.today)

What am I missing?

Upvotes: 49

Views: 50191

Answers (3)

Bruno Degomme
Bruno Degomme

Reputation: 1143

FYI you can also use one sided ranges.

For all calls with due date from 1 week ago

@due_this_week = current_user.tasks.where(due_date: 1.week.ago..)

or for all calls with due date up to today

@due_this_week = current_user.tasks.where(due_date: ..Date.today)

Upvotes: 5

NARKOZ
NARKOZ

Reputation: 27901

Should be:

@due_this_week = current_user.tasks.where(due_date: 1.week.ago..Date.today)

Upvotes: 97

Cody Barr
Cody Barr

Reputation: 631

Turns out my controller somehow wasn't set up correctly and was no longer saving the current_user's ID when creating new assignments, which is why they weren't being found. I figured this out using the rails console and running a find on the last few assignments submitted. The user_id was set to nil. Thanks for the assist @mu is too short.

Upvotes: 1

Related Questions