liquid icon indicating copy to clipboard operation
liquid copied to clipboard

Cannot Sort Metaobject by Numerical Metafield - "cannot sort values of incompatible types" Error

Open gazjones00 opened this issue 2 years ago • 2 comments

Summary:

When trying to sort a Metaobject that contains several metafields, including order_index of type number_integer, the Liquid engine throws an error that says cannot sort values of incompatible types. The sorting works perfectly well when sorting by single_line_text_field or string, but not with a numerical value.

Details:

We have a Metaobject defined for a size guide, containing a metafield order_index of type number_integer. We are trying to sort this Metaobject by order_index but are encountering an error.

Code sample:

liquidCopy code
{% liquid
  assign sizes = shop.metaobjects.standard_size.values | sort: 'order_index'
  ...
%}

The error seems to be originating from this line: https://github.com/Shopify/liquid/blob/0b9318222bcc09681e52fd5b8e70262274e673bf/lib/liquid/standardfilters.rb#L923

Inside the sort function here: https://github.com/Shopify/liquid/blob/0b9318222bcc09681e52fd5b8e70262274e673bf/lib/liquid/standardfilters.rb#L355

Steps to Reproduce:

  1. Define a Metaobject with a metafield order_index of type number_integer.
  2. As shown in the code sample, Try to sort the Metaobject using Liquid syntax.
  3. Observe the error cannot sort values of incompatible types.

Expected Behavior:

The Metaobject should be sorted based on the order_index field without errors.

Actual Behavior:

Throws error cannot sort values of incompatible types.

Additional Information:

  • This works perfectly when sorting by a single_line_text_field or string.

Thank you for taking the time to look into this issue. I would love to hear any insights or solutions.

gazjones00 avatar Sep 05 '23 11:09 gazjones00

@gazjones00

I encountered the same issue when attempting to sort by date/number. I wasn't able to sort by number and the date isn't sourced from a metaobject JSON.

As a temporary workaround, I defined the date as a string within the metaobject. I then used regex validation to ensure user input adheres to the 'yyyy-mm-dd' format. By doing this, I was able to sort the dates alphabetically, and this approach successfully resolved the issue for me.

I hope this helps someone else facing a similar problem, but it'd be great if the core issue with sorting numerical types could be addressed. Thanks for this issue!

lucasaraujo45 avatar Oct 26 '23 16:10 lucasaraujo45

Seems entirely silly that we cannot sort by date type in a metaobject

NeuroticCoder91 avatar May 08 '24 17:05 NeuroticCoder91