Skip to content

Commit c99a9aa

Browse files
committed
Merge pull request #45623 from fatkodima/fix-in_order_of-mysql-strings
Fix `QueryMethods#in_order_of` for non-integer columns in MySQL
1 parent 4987ca0 commit c99a9aa

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def supports_insert_on_duplicate_update?
139139
end
140140

141141
def field_ordered_value(column, values) # :nodoc:
142-
field = Arel::Nodes::NamedFunction.new("FIELD", [column, values.reverse])
142+
field = Arel::Nodes::NamedFunction.new("FIELD", [column, values.reverse.map { |value| Arel::Nodes.build_quoted(value) }])
143143
Arel::Nodes::Descending.new(field)
144144
end
145145

activerecord/test/cases/relation/field_ordered_values_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ def test_in_order_of_expression
5151
assert_equal(order, posts.map(&:id))
5252
end
5353

54+
def test_in_order_of_with_string_column
55+
Book.destroy_all
56+
Book.create!(format: "paperback")
57+
Book.create!(format: "ebook")
58+
Book.create!(format: "hardcover")
59+
60+
order = %w[hardcover paperback ebook]
61+
books = Book.in_order_of(:format, order)
62+
63+
assert_equal(order, books.map(&:format))
64+
end
65+
5466
def test_in_order_of_after_regular_order
5567
order = [3, 4, 1]
5668
posts = Post.where(type: "Post").order(:type).in_order_of(:id, order)

0 commit comments

Comments
 (0)