instance method
in_order_of
Ruby on Rails 7.0.10
Since v7.0.10Signature
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
-
columnreq -
valuesreq
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