method
in_order_of
v7.2.3 -
Show latest stable
-
0 notes -
Class: ActiveRecord::QueryMethods
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0
- 3.0.9
- 3.1.0
- 3.2.1
- 3.2.8
- 3.2.13
- 4.0.2
- 4.1.8
- 4.2.1
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.0
- 6.1.3.1
- 6.1.7.7
- 7.0.0 (0)
- 7.1.3.2 (2)
- 7.1.3.4 (0)
- 7.2.3 (38)
- 8.0.0 (14)
- 8.1.1 (0)
- What's this?
in_order_of(column, values)
public
Applies an ORDER BY clause based on a given column, ordered and filtered 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
column can point to an enum column; the actual query generated may be different depending on the database adapter and the column definition.
class Conversation < ActiveRecord::Base enum :status, [ :active, :archived ] end Conversation.in_order_of(:status, [:archived, :active]) # SELECT "conversations".* FROM "conversations" # WHERE "conversations"."status" IN (1, 0) # ORDER BY CASE # WHEN "conversations"."status" = 1 THEN 1 # WHEN "conversations"."status" = 0 THEN 2 # END ASC
values can also include nil.
Conversation.in_order_of(:status, [nil, :archived, :active]) # SELECT "conversations".* FROM "conversations" # WHERE ("conversations"."status" IN (1, 0) OR "conversations"."status" IS NULL) # ORDER BY CASE # WHEN "conversations"."status" IS NULL THEN 1 # WHEN "conversations"."status" = 1 THEN 2 # WHEN "conversations"."status" = 0 THEN 3 # END ASC

