instance method in_order_of

Ruby on Rails 7.0.10

Since v7.0.10

Available in: v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

in_order_of(column, values)

Allows to specify an order by a specific set of values.

User.in_order_of(:id, [1, 5, 3])
# SELECT "users".* FROM "users"
#   WHERE "users"."id" IN (1, 5, 3)
#   ORDER BY CASE
#     WHEN "users"."id" = 1 THEN 1
#     WHEN "users"."id" = 5 THEN 2
#     WHEN "users"."id" = 3 THEN 3
#   END ASC

Parameters

column req
values req
Source
# File activerecord/lib/active_record/relation/query_methods.rb, line 458
    def in_order_of(column, values)
      klass.disallow_raw_sql!([column], permit: connection.column_name_with_order_matcher)
      return spawn.none! if values.empty?

      references = column_references([column])
      self.references_values |= references unless references.empty?

      values = values.map { |value| type_caster.type_cast_for_database(column, value) }
      arel_column = column.is_a?(Symbol) ? order_column(column.to_s) : column

      where_clause =
        if values.include?(nil)
          arel_column.in(values.compact).or(arel_column.eq(nil))
        else
          arel_column.in(values)
        end

      spawn
        .order!(build_case_for_value_position(arel_column, values))
        .where!(where_clause)
    end

Defined in activerecord/lib/active_record/relation/query_methods.rb line 458 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::QueryMethods

Type at least 2 characters to search.

↑↓ navigate · open · esc close