crispychicken
crispychicken

Reputation: 2662

Can't order ActiveRecord Relation by time in Rails 4

I got this query and would like to order the results by 'delivery_time':

d = Date.today.at_midnight
orders = car.orders.where("finished_at IS NOT NULL AND delivery_time > ?", d).order(delivery_time: :desc)

The problem is, the order method doesn't work - it still gets ordered by id! Whatever I put into the order method arguments doesn't seem to work.

This is what my orders table partially looks like:

  create_table "orders", force: true do |t|
    t.datetime "delivery_time"
    t.datetime "finished_at"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

car.rb:

has_many :orders, -> { order "delivery_time ASC" }

.explain output:

 SELECT `orders`.* FROM `orders`  WHERE `orders`.`car_id` = 1 AND (finished_at IS NOT NULL AND delivery_time > '2014-09-09 03:00:00')  ORDER BY delivery_time ASC, `orders`.`delivery_time` DESC

Upvotes: 0

Views: 220

Answers (1)

vee
vee

Reputation: 38645

In order to override ordering, try using reorder instead of order.

orders = car.orders.where(
  "finished_at IS NOT NULL AND delivery_time > ?", d
).reorder(delivery_time: :desc)

Upvotes: 1

Related Questions