Если вы используете Postgres, вы должны использовать EXTRACT(EPOCH FROM ())
для преобразования интервала в секунды, поскольку ABS
принимает только числа в качестве аргументов.
scope :order_by_closest_to, lambda { |date|
{:order => %{ABS(EXTRACT(EPOCH FROM ('#{date.to_formatted_s(:db)}'::timestamp - some_timestamp_column))) asc} }
}
Я не думаю, что есть какой-либо независимый от базы данных способ выполнить этот запрос, так как функции и приведение типов различаются для mysql, postgres и sqlite.